type token =
  | IDENT of (string)
  | CST_CHAR of (string)
  | CST_INT of (string)
  | CST_FLOAT of (string)
  | CST_STRING of (string)
  | CST_WSTRING of (string)
  | NAMED_TYPE of (string)
  | EOF
  | CHAR
  | INT
  | DOUBLE
  | FLOAT
  | VOID
  | INT64
  | INT32
  | ENUM
  | STRUCT
  | TYPEDEF
  | UNION
  | SIGNED
  | UNSIGNED
  | LONG
  | SHORT
  | VOLATILE
  | EXTERN
  | STATIC
  | CONST
  | RESTRICT
  | AUTO
  | REGISTER
  | ARG_e of (string)
  | ARG_eo of (string)
  | ARG_E of (string)
  | ARG_u of (string)
  | ARG_b of (string)
  | ARG_t of (string)
  | ARG_d of (string)
  | ARG_lo of (string)
  | ARG_l of (string)
  | ARG_i of (string)
  | ARG_o of (string)
  | ARG_va of (string)
  | ARG_f of (string)
  | ARG_F of (string)
  | ARG_A of (string)
  | ARG_v of (string)
  | ARG_k of (string)
  | ARG_c of (string)
  | ARG_s of (string)
  | ARG_p of (string)
  | ARG_P of (string)
  | ARG_I of (string)
  | ARG_S of (string)
  | ARG_g of (string)
  | SIZEOF
  | ALIGNOF
  | EQ
  | ARROW
  | DOT
  | EQ_EQ
  | EXCLAM_EQ
  | INF
  | SUP
  | INF_EQ
  | SUP_EQ
  | MINUS_EQ
  | PLUS_EQ
  | STAR_EQ
  | PLUS
  | MINUS
  | STAR
  | SLASH
  | PERCENT
  | TILDE
  | AND
  | PIPE
  | CIRC
  | EXCLAM
  | AND_AND
  | PIPE_PIPE
  | INF_INF
  | SUP_SUP
  | PLUS_PLUS
  | MINUS_MINUS
  | RPAREN
  | LPAREN
  | RBRACE
  | LBRACE
  | LBRACKET
  | RBRACKET
  | COLON
  | SEMICOLON
  | COMMA
  | ELLIPSIS
  | QUEST
  | BREAK
  | CONTINUE
  | GOTO
  | RETURN
  | SWITCH
  | CASE
  | DEFAULT
  | WHILE
  | DO
  | FOR
  | IF
  | THEN
  | ELSE
  | SLASH_EQ
  | PERCENT_EQ
  | AND_EQ
  | PIPE_EQ
  | CIRC_EQ
  | INF_INF_EQ
  | SUP_SUP_EQ
  | ATTRIBUTE
  | INLINE
  | ASM
  | TYPEOF
  | FUNCTION__
  | PRETTY_FUNCTION__
  | LABEL__
  | BUILTIN_VA_ARG
  | BUILTIN_VA_LIST
  | BLOCKATTRIBUTE
  | DECLSPEC
  | MSASM of (string)
  | MSATTR of (string)
  | PRAGMA

open Parsing;;
# 40 "src/formatparse.mly"
open Cil
open Pretty
module E = Errormsg

let parse_error msg : 'a =           (* sm: c++-mode highlight hack: -> ' <- *)
  E.hadErrors := true;
  E.parse_error
    msg


let getArg (argname: string) (args: (string * formatArg) list) = 
  try 
    snd (List.find (fun (n, a) -> n = argname) args)
  with _ -> 
    E.s (error "Pattern string %s does not have argument with name %s\n"
           !Lexerhack.currentPattern argname)

let wrongArgType (which: string) (expected: string) (found: formatArg) = 
  E.s (bug "Expecting %s argument (%s) and found %a\n" 
         expected which d_formatarg found)

let doUnop (uo: unop) subexp = 
  ((fun args -> 
        let e = (fst subexp) args in
        UnOp(uo, e, typeOf e)),

   (fun e -> match e with 
     UnOp(uo', e', _) when uo  = uo' -> (snd subexp) e' 
   | _ -> None)) 

let buildPlus e1 e2 : exp = 
  let t1 = typeOf e1 in
  if isPointerType t1 then 
    BinOp(PlusPI, e1, e2, t1)
  else 
    BinOp(PlusA, e1, e2, t1)

let buildMinus e1 e2 : exp = 
  let t1 = typeOf e1 in
  let t2 = typeOf e2 in
  if isPointerType t1 then
    if isPointerType t2 then
      BinOp(MinusPP, e1, e2, intType)
    else
      BinOp(MinusPI, e1, e2, t1)
  else
    BinOp(MinusA, e1, e2, t1)

let doBinop bop e1t e2t = 
  ((fun args -> 
    let e1 = (fst e1t) args in 
    let e2 = (fst e2t) args in 
    let t1 = typeOf e1 in
    BinOp(bop, e1, e2, t1)),

   (fun e -> match e with 
     BinOp(bop', e1, e2, _) when bop' = bop -> begin
       match (snd e1t) e1, (snd e2t) e2 with
         Some m1, Some m2 -> Some (m1 @ m2)
       | _, _ -> None
     end
   | _ -> None))

(* Check the equivalence of two format lists *)
let rec checkSameFormat (fl1: formatArg list) (fl2: formatArg list) = 
  match fl1, fl2 with 
    [], [] -> true
  | h1::t1, h2::t2 -> begin
      let rec checkOffsetEq o1 o2 = 
        match o1, o2 with
          NoOffset, NoOffset -> true
        | Field(f1, o1'), Field(f2, o2') -> 
            f1.fname = f2.fname && checkOffsetEq o1' o2'
        | Index(e1, o1'), Index(e2, o2') -> 
            checkOffsetEq o1' o2' && checkExpEq e1 e2
        | _, _ -> false

      and checkExpEq e1 e2 = 
        match e1, e2 with 
          Const(CInt64(n1, _, _)), Const(CInt64(n2, _, _)) -> n1 = n2
        | Lval l1, Lval l2 -> checkLvalEq l1 l2
        | UnOp(uo1, e1, _), UnOp(uo2, e2, _) -> 
            uo1 = uo2 && checkExpEq e1 e2
        | BinOp(bo1, e11, e12, _), BinOp(bo2, e21, e22, _) -> 
            bo1 = bo2 && checkExpEq e11 e21 && checkExpEq e21 e22
        | AddrOf l1, AddrOf l2 -> checkLvalEq l1 l2
        | StartOf l1, StartOf l2 -> checkLvalEq l1 l2
        | SizeOf t1, SizeOf t2 -> typeSig t1 = typeSig t2
        | _, _ -> 
            ignore (E.warn "checkSameFormat for Fe"); false

      and checkLvalEq l1 l2 = 
        match l1, l2 with
          (Var v1, o1), (Var v2, o2) -> v1 == v2 && checkOffsetEq o1 o2
        | (Mem e1, o1), (Mem e2, o2) -> 
            checkOffsetEq o1 o2 && checkExpEq e1 e2
        | _, _ -> false
      in
      let hdeq = 
        match h1, h2 with 
          Fv v1, Fv v2 -> v1 == v2
        | Fd n1, Fd n2 -> n1 = n2
        | Fe e1, Fe e2 -> checkExpEq e1 e2
        | Fi i1, Fi i2 -> ignore (E.warn "checkSameFormat for Fi"); false
        | Ft t1, Ft t2 -> typeSig t1 = typeSig t2
        | Fl l1, Fl l2 -> checkLvalEq l1 l2
        | Fo o1, Fo o2 -> checkOffsetEq o1 o2
        | Fc c1, Fc c2 -> c1 == c2
        | _, _ -> false
      in
      hdeq || checkSameFormat t1 t2
  end
  | _, _ -> false

let matchBinopEq (bopeq: binop -> bool) lvt et = 
  (fun i -> match i with 
    Set (lv, BinOp(bop', Lval (lv'), e', _), l) when bopeq bop' -> begin
      match lvt lv, lvt lv', et e' with 
        Some m1, Some m1', Some m2 -> 
          (* Must check that m1 and m2 are the same *)
          if checkSameFormat m1 m1' then 
            Some (m1 @ m2)
          else
            None
      | _, _, _ -> None
     end
  | _ -> None)

let doBinopEq bop lvt et = 
  ((fun loc args -> 
    let l = (fst lvt) args in
    Set(l, BinOp(bop, (Lval l), (fst et) args, typeOfLval l), loc)),

   matchBinopEq (fun bop' -> bop = bop') (snd lvt) (snd et))


let getField (bt: typ) (fname: string) : fieldinfo = 
  match unrollType bt with 
    TComp(ci, _) -> begin
      try
        List.find (fun f -> fname = f.fname) ci.cfields
      with Not_found -> 
        E.s (bug "Cannot find field %s in %s\n" fname (compFullName ci))
    end
  | t -> E.s (bug "Trying to access field %s in non-struct\n" fname) 


let matchIntType (ik: ikind) (t:typ) : formatArg list option = 
  match unrollType t with 
    TInt(ik', _) when ik = ik' -> Some []
  | _ -> None

let matchFloatType (fk: fkind) (t:typ) : formatArg list option = 
  match unrollType t with 
    TFloat(fk', _) when fk = fk' -> Some []
  | _ -> None

let doAttr (id: string) 
           (aargs: (((string * formatArg) list -> attrparam list) * 
                    (attrparam list -> formatArg list option)) option)
    = 
  let t = match aargs with 
    Some t -> t
  | None -> (fun _ -> []), 
            (function [] -> Some [] | _ -> None)
  in
  ((fun args -> Attr (id, (fst t) args)), 
   
   (fun attrs -> 
     (* Find the attributes with the same ID *)
     List.fold_left 
       (fun acc a -> 
         match acc, a with 
           Some _, _ -> acc (* We found one already *)
         | None, Attr(id', args) when id = id' -> 
             (* Now match the arguments *)
             (snd t) args 
         | None, _ -> acc)
       None
       attrs))


type falist = formatArg list

type maybeInit = 
    NoInit
  | InitExp of exp
  | InitCall of lval * exp list

# 324 "src/formatparse.ml"
let yytransl_const = [|
    0 (* EOF *);
  264 (* CHAR *);
  265 (* INT *);
  266 (* DOUBLE *);
  267 (* FLOAT *);
  268 (* VOID *);
  269 (* INT64 *);
  270 (* INT32 *);
  271 (* ENUM *);
  272 (* STRUCT *);
  273 (* TYPEDEF *);
  274 (* UNION *);
  275 (* SIGNED *);
  276 (* UNSIGNED *);
  277 (* LONG *);
  278 (* SHORT *);
  279 (* VOLATILE *);
  280 (* EXTERN *);
  281 (* STATIC *);
  282 (* CONST *);
  283 (* RESTRICT *);
  284 (* AUTO *);
  285 (* REGISTER *);
  310 (* SIZEOF *);
  311 (* ALIGNOF *);
  312 (* EQ *);
  313 (* ARROW *);
  314 (* DOT *);
  315 (* EQ_EQ *);
  316 (* EXCLAM_EQ *);
  317 (* INF *);
  318 (* SUP *);
  319 (* INF_EQ *);
  320 (* SUP_EQ *);
  321 (* MINUS_EQ *);
  322 (* PLUS_EQ *);
  323 (* STAR_EQ *);
  324 (* PLUS *);
  325 (* MINUS *);
  326 (* STAR *);
  327 (* SLASH *);
  328 (* PERCENT *);
  329 (* TILDE *);
  330 (* AND *);
  331 (* PIPE *);
  332 (* CIRC *);
  333 (* EXCLAM *);
  334 (* AND_AND *);
  335 (* PIPE_PIPE *);
  336 (* INF_INF *);
  337 (* SUP_SUP *);
  338 (* PLUS_PLUS *);
  339 (* MINUS_MINUS *);
  340 (* RPAREN *);
  341 (* LPAREN *);
  342 (* RBRACE *);
  343 (* LBRACE *);
  344 (* LBRACKET *);
  345 (* RBRACKET *);
  346 (* COLON *);
  347 (* SEMICOLON *);
  348 (* COMMA *);
  349 (* ELLIPSIS *);
  350 (* QUEST *);
  351 (* BREAK *);
  352 (* CONTINUE *);
  353 (* GOTO *);
  354 (* RETURN *);
  355 (* SWITCH *);
  356 (* CASE *);
  357 (* DEFAULT *);
  358 (* WHILE *);
  359 (* DO *);
  360 (* FOR *);
  361 (* IF *);
  362 (* THEN *);
  363 (* ELSE *);
  364 (* SLASH_EQ *);
  365 (* PERCENT_EQ *);
  366 (* AND_EQ *);
  367 (* PIPE_EQ *);
  368 (* CIRC_EQ *);
  369 (* INF_INF_EQ *);
  370 (* SUP_SUP_EQ *);
  371 (* ATTRIBUTE *);
  372 (* INLINE *);
  373 (* ASM *);
  374 (* TYPEOF *);
  375 (* FUNCTION__ *);
  376 (* PRETTY_FUNCTION__ *);
  377 (* LABEL__ *);
  378 (* BUILTIN_VA_ARG *);
  379 (* BUILTIN_VA_LIST *);
  380 (* BLOCKATTRIBUTE *);
  381 (* DECLSPEC *);
  384 (* PRAGMA *);
    0|]

let yytransl_block = [|
  257 (* IDENT *);
  258 (* CST_CHAR *);
  259 (* CST_INT *);
  260 (* CST_FLOAT *);
  261 (* CST_STRING *);
  262 (* CST_WSTRING *);
  263 (* NAMED_TYPE *);
  286 (* ARG_e *);
  287 (* ARG_eo *);
  288 (* ARG_E *);
  289 (* ARG_u *);
  290 (* ARG_b *);
  291 (* ARG_t *);
  292 (* ARG_d *);
  293 (* ARG_lo *);
  294 (* ARG_l *);
  295 (* ARG_i *);
  296 (* ARG_o *);
  297 (* ARG_va *);
  298 (* ARG_f *);
  299 (* ARG_F *);
  300 (* ARG_A *);
  301 (* ARG_v *);
  302 (* ARG_k *);
  303 (* ARG_c *);
  304 (* ARG_s *);
  305 (* ARG_p *);
  306 (* ARG_P *);
  307 (* ARG_I *);
  308 (* ARG_S *);
  309 (* ARG_g *);
  382 (* MSASM *);
  383 (* MSATTR *);
    0|]

let yylhs = "\255\255\
\001\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\
\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\
\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\
\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\
\002\000\012\000\013\000\009\000\009\000\009\000\005\000\005\000\
\005\000\005\000\005\000\014\000\014\000\004\000\004\000\004\000\
\004\000\003\000\015\000\015\000\010\000\010\000\010\000\010\000\
\010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
\010\000\010\000\010\000\010\000\010\000\010\000\017\000\017\000\
\018\000\018\000\018\000\018\000\018\000\011\000\011\000\020\000\
\020\000\020\000\020\000\020\000\019\000\019\000\019\000\016\000\
\016\000\016\000\021\000\021\000\021\000\021\000\022\000\022\000\
\023\000\023\000\023\000\024\000\024\000\024\000\006\000\006\000\
\006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
\006\000\006\000\006\000\006\000\006\000\026\000\025\000\025\000\
\027\000\027\000\027\000\007\000\007\000\007\000\007\000\007\000\
\007\000\007\000\007\000\007\000\008\000\008\000\008\000\008\000\
\028\000\028\000\028\000\029\000\029\000\029\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000"

let yylen = "\002\000\
\000\000\001\000\001\000\001\000\002\000\004\000\002\000\004\000\
\002\000\002\000\002\000\002\000\002\000\002\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
\004\000\001\000\001\000\001\000\001\000\001\000\001\000\002\000\
\002\000\004\000\005\000\001\000\001\000\001\000\000\000\003\000\
\004\000\001\000\003\000\001\000\001\000\001\000\001\000\001\000\
\002\000\001\000\002\000\001\000\002\000\001\000\002\000\002\000\
\003\000\001\000\001\000\002\000\002\000\004\000\003\000\001\000\
\000\000\001\000\004\000\004\000\007\000\000\000\001\000\001\000\
\001\000\001\000\001\000\003\000\000\000\001\000\001\000\000\000\
\001\000\002\000\001\000\001\000\001\000\006\000\001\000\004\000\
\001\000\003\000\001\000\001\000\004\000\001\000\002\000\004\000\
\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
\004\000\004\000\007\000\005\000\006\000\001\000\000\000\001\000\
\001\000\001\000\003\000\005\000\007\000\003\000\002\000\002\000\
\003\000\005\000\001\000\001\000\000\000\001\000\002\000\006\000\
\001\000\001\000\002\000\000\000\002\000\005\000\002\000\002\000\
\002\000\002\000\002\000\002\000\002\000\002\000"

let yydefred = "\000\000\
\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\143\000\045\000\038\000\002\000\034\000\036\000\039\000\
\044\000\037\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\004\000\003\000\000\000\000\000\
\056\000\060\000\067\000\066\000\054\000\000\000\000\000\000\000\
\000\000\058\000\053\000\052\000\055\000\000\000\145\000\000\000\
\050\000\046\000\000\000\000\000\146\000\000\000\000\000\118\000\
\000\000\000\000\148\000\000\000\132\000\138\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\149\000\131\000\134\000\
\000\000\150\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\040\000\068\000\069\000\057\000\
\061\000\000\000\059\000\064\000\000\000\093\000\091\000\092\000\
\089\000\000\000\000\000\000\000\000\000\000\000\103\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\127\000\128\000\087\000\
\000\000\000\000\000\000\000\000\139\000\135\000\000\000\000\000\
\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\065\000\000\000\
\000\000\074\000\000\000\000\000\051\000\000\000\090\000\048\000\
\000\000\000\000\000\000\000\000\000\000\000\000\122\000\000\000\
\000\000\120\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\129\000\126\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\042\000\070\000\000\000\000\000\000\000\
\000\000\049\000\104\000\000\000\106\000\105\000\107\000\000\000\
\000\000\108\000\109\000\110\000\111\000\112\000\113\000\114\000\
\000\000\000\000\000\000\000\000\000\000\043\000\000\000\000\000\
\071\000\000\000\000\000\000\000\123\000\116\000\000\000\130\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\076\000\
\000\000\117\000\000\000\000\000\136\000\000\000\102\000\099\000\
\000\000\000\000\094\000\000\000\115\000\125\000\000\000\000\000\
\096\000\000\000\081\000\082\000\080\000\000\000\000\000\079\000\
\142\000\000\000\098\000\077\000\000\000\101\000\084\000"

let yydgoto = "\009\000\
\010\000\054\000\047\000\053\000\029\000\069\000\073\000\074\000\
\030\000\048\000\022\001\031\000\107\000\032\000\049\000\123\000\
\181\000\182\000\146\000\024\001\124\000\240\000\009\001\010\001\
\193\000\060\000\194\000\071\000\237\000"

let yysindex = "\056\001\
\000\000\153\009\061\255\243\254\153\009\044\009\223\008\064\008\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\210\009\236\009\153\009\153\009\153\009\153\009\
\153\009\153\009\167\008\052\012\000\000\000\000\153\009\243\254\
\000\000\000\000\000\000\000\000\000\000\217\254\240\254\156\255\
\023\255\000\000\000\000\000\000\000\000\218\254\000\000\012\255\
\000\000\000\000\057\255\153\009\000\000\052\012\000\000\000\000\
\228\254\107\255\000\000\153\009\000\000\000\000\064\008\250\254\
\254\254\070\009\010\255\014\255\083\255\000\000\000\000\000\000\
\064\008\000\000\012\255\167\008\049\255\167\008\049\255\245\254\
\245\254\049\255\049\255\049\255\049\255\153\009\184\011\025\255\
\000\000\111\255\153\009\153\009\153\009\153\009\153\009\153\009\
\153\009\153\009\153\009\153\009\153\009\153\009\153\009\153\009\
\153\009\153\009\153\009\049\255\000\000\000\000\000\000\000\000\
\000\000\097\255\000\000\000\000\153\009\000\000\000\000\000\000\
\000\000\040\255\032\255\012\255\243\254\153\011\000\000\153\009\
\153\009\153\009\153\009\127\009\153\009\153\009\153\009\153\009\
\153\009\153\009\153\009\047\255\053\255\000\000\000\000\000\000\
\052\012\051\255\153\009\153\009\000\000\000\000\032\255\059\255\
\063\255\224\254\000\000\153\009\243\254\116\007\116\007\087\005\
\087\005\087\005\087\005\245\254\245\254\049\255\049\255\049\255\
\107\009\133\012\158\012\138\255\138\255\108\012\000\000\215\011\
\060\255\000\000\012\255\012\255\000\000\062\255\000\000\000\000\
\243\254\142\007\069\255\046\010\079\010\112\010\000\000\007\010\
\064\255\000\000\145\010\178\010\211\010\244\010\021\011\054\011\
\087\011\127\009\000\000\000\000\246\011\021\012\099\255\158\255\
\158\255\243\254\049\255\000\000\000\000\161\255\032\255\032\255\
\070\009\000\000\000\000\127\009\000\000\000\000\000\000\127\009\
\075\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\085\255\223\008\223\008\153\009\079\255\000\000\082\255\087\255\
\000\000\092\255\086\255\096\255\000\000\000\000\093\255\000\000\
\078\255\052\012\102\255\064\008\091\255\098\255\104\255\000\000\
\106\255\000\000\223\008\127\009\000\000\105\255\000\000\000\000\
\115\255\108\255\000\000\008\255\000\000\000\000\117\255\091\255\
\000\000\091\255\000\000\000\000\000\000\118\255\112\255\000\000\
\000\000\121\255\000\000\000\000\008\255\000\000\000\000"

let yyrindex = "\000\000\
\000\000\000\000\000\000\214\000\000\000\000\000\000\000\222\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\223\000\000\000\000\000\000\000\186\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\124\000\000\000\000\000\000\000\000\000\000\000\000\000\198\000\
\000\000\000\000\000\000\000\000\000\000\000\000\080\007\000\000\
\000\000\083\012\000\000\000\000\000\000\000\000\139\255\000\000\
\000\000\133\255\000\000\000\000\100\000\000\000\000\000\000\000\
\003\000\000\000\006\255\000\000\245\000\000\000\048\001\244\003\
\047\004\107\001\166\001\225\001\028\002\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\087\002\000\000\000\000\000\000\000\000\
\000\000\144\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\042\000\093\000\186\000\000\000\000\000\000\000\
\000\000\000\000\000\000\142\255\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\083\012\000\000\000\000\000\000\000\000\
\199\254\000\000\000\000\000\000\000\000\000\000\058\255\000\000\
\000\000\233\007\000\000\000\000\186\000\066\006\125\006\086\005\
\145\005\204\005\007\006\106\004\165\004\146\002\205\002\008\003\
\184\006\243\006\048\000\224\004\027\005\021\007\000\000\000\000\
\000\000\000\000\093\000\020\255\000\000\009\000\000\000\000\000\
\186\000\000\000\120\011\000\000\000\000\000\000\000\000\145\255\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\142\255\000\000\000\000\000\000\000\000\141\255\067\003\
\126\003\186\000\185\003\000\000\000\000\000\000\135\000\209\254\
\144\255\000\000\000\000\142\255\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\146\255\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\001\000\143\255\120\011\003\000\000\000\000\000\181\000\000\000\
\000\000\000\000\000\000\142\255\000\000\031\255\000\000\000\000\
\000\000\152\255\000\000\153\255\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\154\255\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000"

let yygindex = "\000\000\
\000\000\143\008\244\255\229\255\005\000\236\000\249\255\197\255\
\000\000\250\255\000\000\000\000\000\000\000\000\024\255\187\255\
\128\255\000\000\027\000\218\255\000\000\000\000\113\255\000\000\
\076\255\000\000\024\000\180\000\000\000"

let yytablesize = 3567
let yytable = "\070\000\
\124\000\075\000\133\000\141\000\109\000\151\000\088\000\110\000\
\072\000\055\000\058\000\058\000\058\000\150\000\088\000\033\000\
\034\000\035\000\036\000\037\000\088\000\233\000\207\000\038\000\
\090\000\039\000\050\000\040\000\041\000\042\000\111\000\086\000\
\178\000\086\000\118\000\023\001\073\000\119\000\120\000\244\000\
\073\000\073\000\043\000\116\000\051\000\090\000\117\000\026\000\
\019\001\044\000\020\001\210\000\023\001\045\000\183\000\121\000\
\075\000\125\000\099\000\100\000\101\000\088\000\127\000\152\000\
\140\000\153\000\075\000\058\000\033\000\034\000\035\000\036\000\
\037\000\058\000\052\000\088\000\038\000\058\000\039\000\015\001\
\040\000\041\000\042\000\011\000\142\000\012\000\241\000\242\000\
\143\000\088\000\088\000\006\001\088\000\088\000\147\000\043\000\
\088\000\184\000\148\000\137\000\021\001\179\000\044\000\088\000\
\088\000\090\000\045\000\088\000\156\000\215\000\216\000\157\000\
\013\000\073\000\100\000\014\000\180\000\175\000\015\000\056\000\
\016\000\057\000\100\000\062\000\177\000\046\000\122\000\017\000\
\026\001\212\000\027\001\202\000\187\000\062\000\073\000\018\000\
\019\000\020\000\203\000\007\001\008\001\204\000\208\000\063\000\
\214\000\073\000\209\000\225\000\073\000\217\000\021\000\022\000\
\023\000\220\000\236\000\024\000\025\000\218\000\011\000\026\000\
\012\000\239\000\128\000\112\000\113\000\246\000\253\000\027\000\
\247\000\252\000\254\000\129\000\130\000\131\000\000\001\255\000\
\114\000\115\000\046\000\001\001\075\000\011\001\238\000\002\001\
\003\001\047\000\004\001\013\000\012\001\016\001\014\000\132\000\
\005\001\015\000\090\000\016\000\013\001\088\000\017\001\018\001\
\025\001\028\001\017\000\029\001\030\001\097\000\098\000\099\000\
\100\000\101\000\018\000\019\000\020\000\047\000\133\000\134\000\
\135\000\136\000\137\000\138\000\139\000\133\000\144\000\085\000\
\133\000\119\000\248\000\249\000\121\000\095\000\024\000\140\000\
\085\000\141\000\026\000\097\000\078\000\083\000\058\000\058\000\
\251\000\059\000\027\000\243\000\005\000\075\000\031\001\245\000\
\149\000\000\000\000\000\014\001\000\000\000\000\000\000\000\000\
\058\000\124\000\000\000\124\000\000\000\000\000\000\000\058\000\
\124\000\124\000\124\000\124\000\124\000\000\000\000\000\000\000\
\124\000\000\000\124\000\000\000\124\000\124\000\124\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\124\000\000\000\
\000\000\124\000\000\000\124\000\124\000\124\000\124\000\124\000\
\000\000\000\000\000\000\000\000\000\000\124\000\124\000\007\000\
\124\000\000\000\000\000\124\000\124\000\124\000\124\000\124\000\
\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\
\072\000\000\000\000\000\000\000\124\000\124\000\124\000\000\000\
\000\000\124\000\124\000\000\000\000\000\124\000\000\000\000\000\
\000\000\026\000\000\000\000\000\000\000\124\000\124\000\124\000\
\133\000\000\000\000\000\000\000\072\000\088\000\000\000\124\000\
\124\000\000\000\124\000\072\000\072\000\000\000\124\000\026\000\
\000\000\124\000\041\000\137\000\137\000\137\000\137\000\137\000\
\026\000\026\000\026\000\137\000\000\000\137\000\124\000\137\000\
\137\000\137\000\026\000\026\000\062\000\073\000\000\000\000\000\
\000\000\073\000\000\000\026\000\026\000\073\000\137\000\000\000\
\026\000\000\000\026\000\026\000\000\000\000\000\000\000\000\000\
\063\000\137\000\062\000\137\000\088\000\062\000\062\000\137\000\
\000\000\000\000\000\000\026\000\026\000\026\000\026\000\026\000\
\026\000\026\000\088\000\000\000\000\000\012\000\063\000\062\000\
\000\000\063\000\063\000\000\000\000\000\000\000\000\000\000\000\
\088\000\088\000\000\000\062\000\088\000\000\000\000\000\088\000\
\088\000\137\000\137\000\063\000\000\000\000\000\073\000\000\000\
\000\000\062\000\137\000\137\000\000\000\137\000\088\000\063\000\
\000\000\137\000\000\000\000\000\137\000\000\000\137\000\062\000\
\062\000\000\000\000\000\062\000\000\000\063\000\062\000\062\000\
\000\000\137\000\073\000\047\000\000\000\000\000\073\000\000\000\
\014\000\073\000\073\000\063\000\063\000\000\000\000\000\063\000\
\000\000\000\000\063\000\063\000\075\000\000\000\062\000\000\000\
\000\000\047\000\047\000\000\000\047\000\047\000\047\000\047\000\
\047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
\047\000\047\000\063\000\047\000\047\000\047\000\000\000\000\000\
\075\000\047\000\047\000\088\000\075\000\047\000\047\000\075\000\
\075\000\000\000\047\000\000\000\047\000\047\000\005\000\000\000\
\000\000\088\000\088\000\011\000\000\000\088\000\000\000\000\000\
\000\000\088\000\000\000\000\000\000\000\047\000\047\000\047\000\
\047\000\047\000\047\000\047\000\005\000\000\000\000\000\005\000\
\005\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\
\005\000\005\000\005\000\005\000\005\000\000\000\005\000\005\000\
\005\000\000\000\000\000\000\000\005\000\005\000\000\000\000\000\
\005\000\005\000\000\000\000\000\000\000\005\000\000\000\005\000\
\005\000\007\000\000\000\000\000\000\000\000\000\013\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\005\000\005\000\005\000\005\000\005\000\005\000\005\000\007\000\
\000\000\000\000\007\000\007\000\007\000\007\000\007\000\007\000\
\007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
\000\000\007\000\007\000\007\000\000\000\000\000\000\000\007\000\
\007\000\000\000\000\000\007\000\007\000\000\000\000\000\000\000\
\007\000\000\000\007\000\007\000\041\000\000\000\000\000\000\000\
\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\007\000\007\000\007\000\007\000\007\000\
\007\000\007\000\041\000\000\000\000\000\041\000\041\000\041\000\
\041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\
\041\000\041\000\041\000\000\000\041\000\041\000\041\000\000\000\
\000\000\000\000\041\000\041\000\000\000\000\000\041\000\041\000\
\000\000\000\000\000\000\041\000\000\000\041\000\041\000\012\000\
\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\041\000\041\000\
\041\000\041\000\041\000\041\000\041\000\012\000\000\000\000\000\
\012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
\012\000\012\000\012\000\012\000\012\000\012\000\000\000\012\000\
\012\000\012\000\000\000\000\000\000\000\012\000\012\000\000\000\
\000\000\012\000\012\000\000\000\000\000\000\000\012\000\000\000\
\012\000\012\000\014\000\000\000\000\000\000\000\000\000\021\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
\014\000\000\000\000\000\014\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
\014\000\000\000\014\000\014\000\014\000\000\000\000\000\000\000\
\014\000\014\000\000\000\000\000\014\000\014\000\000\000\000\000\
\000\000\014\000\000\000\014\000\014\000\011\000\000\000\000\000\
\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\014\000\014\000\014\000\014\000\
\014\000\014\000\014\000\011\000\000\000\000\000\011\000\011\000\
\011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
\011\000\011\000\011\000\011\000\000\000\011\000\011\000\011\000\
\000\000\000\000\000\000\011\000\011\000\000\000\000\000\011\000\
\011\000\000\000\000\000\000\000\011\000\000\000\011\000\011\000\
\013\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\000\
\011\000\011\000\011\000\011\000\011\000\011\000\013\000\000\000\
\000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
\013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\
\013\000\013\000\013\000\000\000\000\000\000\000\013\000\013\000\
\000\000\000\000\013\000\013\000\000\000\000\000\000\000\013\000\
\000\000\013\000\013\000\019\000\000\000\000\000\000\000\000\000\
\033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\
\013\000\019\000\000\000\000\000\019\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\
\019\000\019\000\000\000\019\000\019\000\019\000\000\000\000\000\
\000\000\019\000\019\000\000\000\000\000\019\000\019\000\000\000\
\000\000\000\000\019\000\000\000\019\000\019\000\020\000\000\000\
\000\000\000\000\000\000\009\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\019\000\019\000\019\000\
\019\000\019\000\019\000\019\000\020\000\000\000\000\000\020\000\
\020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\
\020\000\020\000\020\000\020\000\020\000\000\000\020\000\020\000\
\020\000\000\000\000\000\000\000\020\000\020\000\000\000\000\000\
\020\000\020\000\000\000\000\000\000\000\020\000\000\000\020\000\
\020\000\021\000\000\000\000\000\000\000\000\000\010\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\020\000\020\000\020\000\020\000\020\000\020\000\020\000\021\000\
\000\000\000\000\021\000\021\000\021\000\021\000\021\000\021\000\
\021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\
\000\000\021\000\021\000\021\000\000\000\000\000\000\000\021\000\
\021\000\000\000\000\000\021\000\021\000\000\000\000\000\000\000\
\021\000\000\000\021\000\021\000\006\000\000\000\000\000\000\000\
\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\021\000\021\000\021\000\021\000\021\000\
\021\000\021\000\006\000\006\000\000\000\006\000\006\000\006\000\
\006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
\006\000\006\000\006\000\000\000\006\000\006\000\006\000\000\000\
\000\000\000\000\006\000\006\000\000\000\000\000\006\000\000\000\
\000\000\000\000\000\000\006\000\000\000\006\000\006\000\008\000\
\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\006\000\006\000\
\006\000\006\000\006\000\006\000\006\000\008\000\008\000\000\000\
\008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
\008\000\008\000\008\000\008\000\008\000\008\000\000\000\008\000\
\008\000\008\000\000\000\000\000\000\000\008\000\008\000\000\000\
\000\000\008\000\000\000\000\000\000\000\000\000\008\000\000\000\
\008\000\008\000\033\000\000\000\000\000\000\000\000\000\022\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
\033\000\000\000\000\000\033\000\033\000\033\000\033\000\033\000\
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
\033\000\000\000\033\000\033\000\033\000\000\000\000\000\000\000\
\033\000\033\000\000\000\000\000\033\000\033\000\000\000\000\000\
\000\000\033\000\000\000\033\000\033\000\009\000\000\000\000\000\
\000\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\033\000\033\000\033\000\033\000\
\033\000\033\000\033\000\009\000\000\000\000\000\009\000\009\000\
\009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\
\009\000\000\000\000\000\000\000\000\000\009\000\009\000\009\000\
\000\000\000\000\000\000\009\000\009\000\000\000\000\000\009\000\
\009\000\000\000\000\000\000\000\009\000\000\000\009\000\009\000\
\010\000\000\000\000\000\000\000\000\000\029\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\009\000\
\009\000\009\000\009\000\009\000\009\000\009\000\010\000\000\000\
\000\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
\010\000\010\000\010\000\010\000\000\000\000\000\000\000\000\000\
\010\000\010\000\010\000\000\000\000\000\000\000\010\000\010\000\
\000\000\000\000\010\000\010\000\000\000\000\000\000\000\010\000\
\000\000\010\000\010\000\016\000\000\000\000\000\000\000\000\000\
\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\010\000\010\000\010\000\010\000\010\000\010\000\
\010\000\016\000\000\000\000\000\016\000\016\000\016\000\016\000\
\016\000\016\000\016\000\016\000\016\000\016\000\016\000\000\000\
\000\000\000\000\000\000\016\000\016\000\016\000\000\000\000\000\
\000\000\016\000\016\000\000\000\000\000\016\000\016\000\000\000\
\000\000\000\000\016\000\000\000\016\000\016\000\017\000\000\000\
\000\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\016\000\016\000\016\000\
\016\000\016\000\016\000\016\000\017\000\000\000\000\000\017\000\
\017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\
\017\000\017\000\000\000\000\000\000\000\000\000\017\000\017\000\
\017\000\000\000\000\000\000\000\017\000\017\000\000\000\000\000\
\017\000\017\000\000\000\000\000\000\000\017\000\000\000\017\000\
\017\000\022\000\000\000\000\000\000\000\000\000\032\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\017\000\017\000\017\000\017\000\017\000\017\000\017\000\022\000\
\000\000\000\000\022\000\022\000\022\000\022\000\022\000\022\000\
\022\000\022\000\022\000\000\000\000\000\000\000\000\000\000\000\
\000\000\022\000\022\000\022\000\000\000\000\000\000\000\022\000\
\022\000\000\000\000\000\022\000\022\000\000\000\000\000\000\000\
\022\000\000\000\022\000\022\000\023\000\000\000\000\000\000\000\
\000\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\022\000\022\000\022\000\022\000\022\000\
\022\000\022\000\023\000\000\000\000\000\023\000\023\000\023\000\
\023\000\023\000\023\000\023\000\023\000\023\000\000\000\000\000\
\000\000\000\000\000\000\000\000\023\000\023\000\023\000\000\000\
\000\000\000\000\023\000\023\000\000\000\000\000\023\000\023\000\
\000\000\000\000\000\000\023\000\000\000\023\000\023\000\029\000\
\000\000\000\000\000\000\000\000\028\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\023\000\023\000\
\023\000\023\000\023\000\023\000\023\000\029\000\000\000\090\000\
\029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
\029\000\000\000\097\000\098\000\099\000\100\000\101\000\029\000\
\029\000\029\000\000\000\000\000\000\000\000\000\105\000\106\000\
\000\000\029\000\029\000\000\000\000\000\000\000\029\000\000\000\
\029\000\029\000\030\000\000\000\000\000\000\000\000\000\024\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
\030\000\000\000\000\000\030\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\030\000\000\000\000\000\000\000\000\000\
\000\000\000\000\030\000\030\000\030\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\030\000\030\000\000\000\000\000\
\000\000\030\000\000\000\030\000\030\000\031\000\000\000\000\000\
\000\000\000\000\025\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\030\000\030\000\030\000\030\000\
\030\000\030\000\030\000\031\000\000\000\000\000\031\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\000\000\
\000\000\000\000\000\000\000\000\018\000\031\000\031\000\031\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\
\031\000\000\000\000\000\000\000\031\000\000\000\031\000\031\000\
\032\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\
\031\000\031\000\031\000\031\000\031\000\031\000\032\000\000\000\
\000\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
\032\000\032\000\000\000\000\000\000\000\000\000\000\000\147\000\
\032\000\032\000\032\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\032\000\032\000\000\000\000\000\000\000\032\000\
\000\000\032\000\032\000\027\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\032\000\032\000\032\000\032\000\032\000\032\000\
\032\000\027\000\000\000\000\000\027\000\027\000\000\000\000\000\
\000\000\000\000\027\000\027\000\027\000\000\000\000\000\000\000\
\000\000\000\000\000\000\027\000\027\000\027\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\027\000\027\000\000\000\
\000\000\000\000\027\000\000\000\027\000\027\000\028\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\027\000\027\000\027\000\
\027\000\027\000\027\000\027\000\028\000\000\000\000\000\028\000\
\028\000\000\000\000\000\000\000\000\000\028\000\028\000\028\000\
\000\000\000\000\000\000\000\000\000\000\000\000\028\000\028\000\
\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\028\000\028\000\000\000\000\000\000\000\028\000\000\000\028\000\
\028\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\028\000\028\000\028\000\028\000\028\000\028\000\028\000\024\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\024\000\024\000\024\000\000\000\000\000\000\000\000\000\000\000\
\000\000\024\000\024\000\024\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\024\000\024\000\000\000\000\000\000\000\
\024\000\000\000\024\000\024\000\025\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\024\000\024\000\024\000\024\000\024\000\
\024\000\024\000\025\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\025\000\025\000\025\000\018\000\000\000\
\000\000\000\000\000\000\000\000\000\000\025\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\025\000\025\000\
\000\000\000\000\000\000\025\000\018\000\025\000\025\000\000\000\
\000\000\000\000\000\000\000\000\000\000\018\000\018\000\018\000\
\000\000\000\000\000\000\000\000\000\000\000\000\025\000\025\000\
\025\000\025\000\025\000\025\000\025\000\000\000\000\000\000\000\
\018\000\018\000\000\000\000\000\000\000\018\000\000\000\018\000\
\018\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\018\000\018\000\018\000\018\000\018\000\018\000\018\000\000\000\
\004\000\000\000\004\000\004\000\004\000\004\000\004\000\004\000\
\028\000\000\000\000\000\004\000\004\000\004\000\004\000\004\000\
\000\000\004\000\004\000\004\000\000\000\000\000\000\000\004\000\
\004\000\077\000\079\000\080\000\081\000\082\000\083\000\084\000\
\085\000\087\000\000\000\000\000\090\000\108\000\000\000\089\000\
\093\000\094\000\095\000\096\000\000\000\000\000\000\000\097\000\
\098\000\099\000\100\000\101\000\000\000\000\000\000\000\000\000\
\000\000\000\000\126\000\105\000\106\000\000\000\090\000\000\000\
\091\000\092\000\093\000\094\000\095\000\096\000\000\000\000\000\
\145\000\097\000\098\000\099\000\100\000\101\000\000\000\102\000\
\103\000\104\000\087\000\000\000\087\000\105\000\106\000\000\000\
\000\000\000\000\000\000\000\000\154\000\000\000\000\000\000\000\
\219\000\158\000\159\000\160\000\161\000\162\000\163\000\164\000\
\165\000\166\000\167\000\168\000\169\000\170\000\171\000\172\000\
\173\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\176\000\000\000\000\000\000\000\000\000\
\000\000\000\000\041\000\000\000\000\000\000\000\186\000\188\000\
\189\000\190\000\192\000\195\000\196\000\197\000\198\000\199\000\
\200\000\201\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\205\000\206\000\041\000\041\000\041\000\041\000\041\000\
\041\000\000\000\211\000\000\000\041\000\041\000\041\000\041\000\
\041\000\000\000\041\000\041\000\041\000\000\000\000\000\000\000\
\041\000\041\000\000\000\000\000\000\000\000\000\000\000\000\000\
\011\000\000\000\012\000\000\000\000\000\000\000\000\000\033\000\
\034\000\035\000\036\000\037\000\000\000\000\000\000\000\038\000\
\000\000\039\000\000\000\040\000\041\000\042\000\000\000\000\000\
\192\000\000\000\000\000\000\000\000\000\013\000\211\000\211\000\
\014\000\000\000\043\000\015\000\056\000\016\000\057\000\145\000\
\000\000\000\000\192\000\000\000\017\000\045\000\192\000\061\000\
\000\000\000\000\062\000\072\000\018\000\019\000\020\000\000\000\
\000\000\000\000\250\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\021\000\022\000\023\000\000\000\000\000\
\024\000\025\000\000\000\000\000\026\000\000\000\000\000\000\000\
\000\000\000\000\192\000\000\000\027\000\000\000\063\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\064\000\065\000\
\000\000\066\000\000\000\000\000\000\000\067\000\000\000\011\000\
\068\000\012\000\000\000\000\000\000\000\000\000\033\000\034\000\
\035\000\036\000\037\000\000\000\000\000\046\000\038\000\000\000\
\039\000\000\000\040\000\041\000\042\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\013\000\000\000\000\000\014\000\
\000\000\043\000\015\000\000\000\016\000\000\000\000\000\000\000\
\044\000\000\000\000\000\017\000\045\000\000\000\000\000\000\000\
\000\000\000\000\000\000\018\000\019\000\020\000\000\000\011\000\
\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\021\000\022\000\086\000\000\000\000\000\024\000\
\025\000\000\000\000\000\026\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\027\000\013\000\000\000\000\000\014\000\
\000\000\000\000\015\000\056\000\016\000\057\000\000\000\000\000\
\000\000\000\000\000\000\017\000\000\000\000\000\061\000\000\000\
\000\000\062\000\000\000\018\000\019\000\020\000\000\000\000\000\
\000\000\000\000\000\000\000\000\046\000\000\000\000\000\000\000\
\000\000\000\000\021\000\022\000\023\000\000\000\000\000\024\000\
\025\000\000\000\000\000\026\000\011\000\000\000\012\000\000\000\
\000\000\000\000\000\000\027\000\000\000\063\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\064\000\065\000\000\000\
\066\000\000\000\000\000\000\000\067\000\000\000\011\000\068\000\
\012\000\013\000\000\000\000\000\014\000\000\000\000\000\015\000\
\056\000\016\000\057\000\000\000\000\000\000\000\000\000\000\000\
\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\018\000\019\000\020\000\013\000\144\000\000\000\014\000\000\000\
\000\000\015\000\000\000\016\000\000\000\000\000\000\000\021\000\
\022\000\023\000\017\000\000\000\024\000\025\000\000\000\000\000\
\026\000\000\000\018\000\019\000\020\000\000\000\000\000\011\000\
\027\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\021\000\022\000\023\000\000\000\000\000\024\000\025\000\
\000\000\000\000\026\000\000\000\000\000\000\000\000\000\000\000\
\000\000\011\000\027\000\012\000\013\000\000\000\191\000\014\000\
\000\000\000\000\015\000\090\000\016\000\091\000\092\000\093\000\
\094\000\095\000\096\000\017\000\000\000\000\000\097\000\098\000\
\099\000\100\000\101\000\018\000\019\000\020\000\013\000\000\000\
\000\000\014\000\105\000\106\000\015\000\000\000\016\000\000\000\
\000\000\000\000\021\000\022\000\023\000\017\000\000\000\024\000\
\025\000\000\000\000\000\026\000\000\000\018\000\019\000\020\000\
\000\000\000\000\011\000\027\000\012\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\021\000\022\000\023\000\000\000\
\000\000\024\000\025\000\000\000\000\000\026\000\000\000\000\000\
\000\000\000\000\000\000\000\000\011\000\027\000\012\000\013\000\
\000\000\000\000\014\000\000\000\000\000\015\000\000\000\016\000\
\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\018\000\019\000\
\020\000\013\000\000\000\000\000\014\000\000\000\000\000\015\000\
\000\000\016\000\000\000\000\000\000\000\021\000\022\000\023\000\
\017\000\000\000\024\000\025\000\000\000\000\000\026\000\000\000\
\018\000\019\000\020\000\000\000\000\000\000\000\076\000\000\000\
\089\000\000\000\000\000\000\000\000\000\000\000\000\000\021\000\
\022\000\023\000\000\000\000\000\024\000\025\000\000\000\000\000\
\026\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\
\078\000\091\000\092\000\093\000\094\000\095\000\096\000\000\000\
\000\000\000\000\097\000\098\000\099\000\100\000\101\000\089\000\
\102\000\103\000\104\000\000\000\000\000\000\000\105\000\106\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\224\000\000\000\000\000\000\000\090\000\000\000\
\091\000\092\000\093\000\094\000\095\000\096\000\000\000\000\000\
\089\000\097\000\098\000\099\000\100\000\101\000\000\000\102\000\
\103\000\104\000\000\000\000\000\000\000\105\000\106\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\
\221\000\091\000\092\000\093\000\094\000\095\000\096\000\000\000\
\000\000\089\000\097\000\098\000\099\000\100\000\101\000\000\000\
\102\000\103\000\104\000\000\000\000\000\000\000\105\000\106\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\090\000\222\000\091\000\092\000\093\000\094\000\095\000\096\000\
\000\000\000\000\089\000\097\000\098\000\099\000\100\000\101\000\
\000\000\102\000\103\000\104\000\000\000\000\000\000\000\105\000\
\106\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\090\000\223\000\091\000\092\000\093\000\094\000\095\000\
\096\000\000\000\000\000\089\000\097\000\098\000\099\000\100\000\
\101\000\000\000\102\000\103\000\104\000\000\000\000\000\000\000\
\105\000\106\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\090\000\226\000\091\000\092\000\093\000\094\000\
\095\000\096\000\000\000\000\000\089\000\097\000\098\000\099\000\
\100\000\101\000\000\000\102\000\103\000\104\000\000\000\000\000\
\000\000\105\000\106\000\000\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\090\000\227\000\091\000\092\000\093\000\
\094\000\095\000\096\000\000\000\000\000\089\000\097\000\098\000\
\099\000\100\000\101\000\000\000\102\000\103\000\104\000\000\000\
\000\000\000\000\105\000\106\000\000\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\090\000\228\000\091\000\092\000\
\093\000\094\000\095\000\096\000\000\000\000\000\089\000\097\000\
\098\000\099\000\100\000\101\000\000\000\102\000\103\000\104\000\
\000\000\000\000\000\000\105\000\106\000\000\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\090\000\229\000\091\000\
\092\000\093\000\094\000\095\000\096\000\000\000\000\000\089\000\
\097\000\098\000\099\000\100\000\101\000\000\000\102\000\103\000\
\104\000\000\000\000\000\000\000\105\000\106\000\000\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\090\000\230\000\
\091\000\092\000\093\000\094\000\095\000\096\000\000\000\000\000\
\089\000\097\000\098\000\099\000\100\000\101\000\000\000\102\000\
\103\000\104\000\000\000\000\000\000\000\105\000\106\000\000\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\090\000\
\231\000\091\000\092\000\093\000\094\000\095\000\096\000\000\000\
\000\000\004\000\097\000\098\000\099\000\100\000\101\000\000\000\
\102\000\103\000\104\000\000\000\000\000\000\000\105\000\106\000\
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\004\000\232\000\004\000\004\000\004\000\004\000\004\000\004\000\
\000\000\000\000\089\000\004\000\004\000\004\000\004\000\004\000\
\000\000\004\000\004\000\004\000\000\000\000\000\000\000\004\000\
\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
\000\000\090\000\004\000\091\000\092\000\093\000\094\000\095\000\
\096\000\089\000\000\000\000\000\097\000\098\000\099\000\100\000\
\101\000\000\000\102\000\103\000\104\000\000\000\000\000\000\000\
\105\000\106\000\000\000\000\000\000\000\000\000\000\000\000\000\
\090\000\185\000\091\000\092\000\093\000\094\000\095\000\096\000\
\089\000\000\000\000\000\097\000\098\000\099\000\100\000\101\000\
\000\000\102\000\103\000\104\000\000\000\000\000\000\000\105\000\
\106\000\000\000\000\000\155\000\000\000\000\000\000\000\090\000\
\000\000\091\000\092\000\093\000\094\000\095\000\096\000\089\000\
\000\000\000\000\097\000\098\000\099\000\100\000\101\000\000\000\
\102\000\103\000\104\000\000\000\000\000\000\000\105\000\106\000\
\000\000\000\000\213\000\000\000\000\000\000\000\090\000\000\000\
\091\000\092\000\093\000\094\000\095\000\096\000\089\000\000\000\
\000\000\097\000\098\000\099\000\100\000\101\000\000\000\102\000\
\103\000\104\000\000\000\000\000\000\000\105\000\106\000\000\000\
\000\000\234\000\000\000\000\000\000\000\090\000\000\000\091\000\
\092\000\093\000\094\000\095\000\096\000\089\000\000\000\000\000\
\097\000\098\000\099\000\100\000\101\000\000\000\102\000\103\000\
\104\000\000\000\000\000\000\000\105\000\106\000\000\000\000\000\
\235\000\000\000\000\000\000\000\090\000\000\000\091\000\092\000\
\093\000\094\000\095\000\096\000\004\000\000\000\000\000\097\000\
\098\000\099\000\100\000\101\000\000\000\102\000\103\000\104\000\
\000\000\000\000\000\000\105\000\106\000\000\000\000\000\000\000\
\000\000\000\000\000\000\004\000\000\000\004\000\004\000\004\000\
\004\000\004\000\004\000\000\000\000\000\000\000\004\000\004\000\
\004\000\004\000\004\000\000\000\004\000\004\000\004\000\000\000\
\000\000\000\000\004\000\004\000\090\000\000\000\091\000\092\000\
\093\000\094\000\095\000\096\000\000\000\000\000\000\000\097\000\
\098\000\099\000\100\000\101\000\000\000\102\000\103\000\104\000\
\000\000\000\000\000\000\105\000\106\000\090\000\000\000\091\000\
\092\000\093\000\094\000\095\000\096\000\000\000\000\000\000\000\
\097\000\098\000\099\000\100\000\101\000\000\000\102\000\000\000\
\104\000\000\000\000\000\000\000\105\000\106\000\090\000\000\000\
\091\000\092\000\093\000\094\000\095\000\096\000\000\000\000\000\
\000\000\097\000\098\000\099\000\100\000\101\000\000\000\102\000\
\000\000\000\000\000\000\000\000\000\000\105\000\106\000"

let yycheck = "\007\000\
\000\000\008\000\000\000\063\000\032\000\075\000\001\001\047\001\
\000\000\005\000\006\000\007\000\008\000\073\000\027\000\008\001\
\009\001\010\001\011\001\012\001\001\001\202\000\151\000\016\001\
\057\001\018\001\040\001\020\001\021\001\022\001\047\001\089\001\
\001\001\091\001\023\001\012\001\084\001\026\001\027\001\220\000\
\088\001\000\000\035\001\021\001\058\001\057\001\085\001\000\000\
\041\001\042\001\043\001\084\001\029\001\046\001\124\000\044\001\
\063\000\001\001\070\001\071\001\072\001\056\001\091\001\076\000\
\060\000\078\000\073\000\063\000\008\001\009\001\010\001\011\001\
\012\001\069\000\088\001\070\001\016\001\073\000\018\001\004\001\
\020\001\021\001\022\001\001\001\091\001\003\001\215\000\216\000\
\091\001\070\001\085\001\001\001\000\000\088\001\085\001\035\001\
\091\001\125\000\085\001\000\000\093\001\070\001\042\001\084\001\
\085\001\057\001\046\001\088\001\084\001\179\000\180\000\001\001\
\030\001\056\001\084\001\033\001\085\001\021\001\036\001\037\001\
\038\001\039\001\092\001\000\000\085\001\118\001\115\001\045\001\
\016\001\157\000\018\001\085\001\128\000\051\001\000\000\053\001\
\054\001\055\001\086\001\049\001\050\001\091\001\084\001\000\000\
\085\001\088\001\084\001\084\001\091\001\088\001\068\001\069\001\
\070\001\085\001\056\001\073\001\074\001\185\000\001\001\077\001\
\003\001\001\001\056\001\008\001\009\001\091\001\085\001\085\001\
\084\001\091\001\084\001\065\001\066\001\067\001\089\001\084\001\
\021\001\022\001\118\001\084\001\000\000\084\001\210\000\091\001\
\107\001\000\000\085\001\030\001\085\001\085\001\033\001\085\001\
\252\000\036\001\057\001\038\001\091\001\000\000\084\001\092\001\
\084\001\084\001\045\001\092\001\084\001\068\001\069\001\070\001\
\071\001\072\001\053\001\054\001\055\001\000\000\108\001\109\001\
\110\001\111\001\112\001\113\001\114\001\000\000\000\000\091\001\
\086\001\084\001\234\000\235\000\084\001\084\001\073\001\091\001\
\089\001\091\001\077\001\084\001\084\001\084\001\234\000\235\000\
\236\000\006\000\085\001\217\000\000\000\252\000\029\001\224\000\
\069\000\255\255\255\255\003\001\255\255\255\255\255\255\255\255\
\252\000\001\001\255\255\003\001\255\255\255\255\255\255\003\001\
\008\001\009\001\010\001\011\001\012\001\255\255\255\255\255\255\
\016\001\255\255\018\001\255\255\020\001\021\001\022\001\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\030\001\255\255\
\255\255\033\001\255\255\035\001\036\001\037\001\038\001\039\001\
\255\255\255\255\255\255\255\255\255\255\045\001\046\001\000\000\
\048\001\255\255\255\255\051\001\052\001\053\001\054\001\055\001\
\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\
\056\001\255\255\255\255\255\255\068\001\069\001\070\001\255\255\
\255\255\073\001\074\001\255\255\255\255\077\001\255\255\255\255\
\255\255\034\001\255\255\255\255\255\255\085\001\086\001\087\001\
\086\001\255\255\255\255\255\255\084\001\001\001\255\255\095\001\
\096\001\255\255\098\001\091\001\092\001\255\255\102\001\056\001\
\255\255\105\001\000\000\008\001\009\001\010\001\011\001\012\001\
\065\001\066\001\067\001\016\001\255\255\018\001\118\001\020\001\
\021\001\022\001\075\001\076\001\001\001\084\001\255\255\255\255\
\255\255\088\001\255\255\084\001\085\001\092\001\035\001\255\255\
\089\001\255\255\091\001\092\001\255\255\255\255\255\255\255\255\
\001\001\046\001\023\001\048\001\056\001\026\001\027\001\052\001\
\255\255\255\255\255\255\108\001\109\001\110\001\111\001\112\001\
\113\001\114\001\070\001\255\255\255\255\000\000\023\001\044\001\
\255\255\026\001\027\001\255\255\255\255\255\255\255\255\255\255\
\084\001\085\001\255\255\056\001\088\001\255\255\255\255\091\001\
\092\001\086\001\087\001\044\001\255\255\255\255\056\001\255\255\
\255\255\070\001\095\001\096\001\255\255\098\001\001\001\056\001\
\255\255\102\001\255\255\255\255\105\001\255\255\107\001\084\001\
\085\001\255\255\255\255\088\001\255\255\070\001\091\001\092\001\
\255\255\118\001\084\001\034\001\255\255\255\255\088\001\255\255\
\000\000\091\001\092\001\084\001\085\001\255\255\255\255\088\001\
\255\255\255\255\091\001\092\001\056\001\255\255\115\001\255\255\
\255\255\056\001\057\001\255\255\059\001\060\001\061\001\062\001\
\063\001\064\001\065\001\066\001\067\001\068\001\069\001\070\001\
\071\001\072\001\115\001\074\001\075\001\076\001\255\255\255\255\
\084\001\080\001\081\001\070\001\088\001\084\001\085\001\091\001\
\092\001\255\255\089\001\255\255\091\001\092\001\034\001\255\255\
\255\255\084\001\085\001\000\000\255\255\088\001\255\255\255\255\
\255\255\092\001\255\255\255\255\255\255\108\001\109\001\110\001\
\111\001\112\001\113\001\114\001\056\001\255\255\255\255\059\001\
\060\001\061\001\062\001\063\001\064\001\065\001\066\001\067\001\
\068\001\069\001\070\001\071\001\072\001\255\255\074\001\075\001\
\076\001\255\255\255\255\255\255\080\001\081\001\255\255\255\255\
\084\001\085\001\255\255\255\255\255\255\089\001\255\255\091\001\
\092\001\034\001\255\255\255\255\255\255\255\255\000\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\108\001\109\001\110\001\111\001\112\001\113\001\114\001\056\001\
\255\255\255\255\059\001\060\001\061\001\062\001\063\001\064\001\
\065\001\066\001\067\001\068\001\069\001\070\001\071\001\072\001\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\255\255\255\255\084\001\085\001\255\255\255\255\255\255\
\089\001\255\255\091\001\092\001\034\001\255\255\255\255\255\255\
\255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\108\001\109\001\110\001\111\001\112\001\
\113\001\114\001\056\001\255\255\255\255\059\001\060\001\061\001\
\062\001\063\001\064\001\065\001\066\001\067\001\068\001\069\001\
\070\001\071\001\072\001\255\255\074\001\075\001\076\001\255\255\
\255\255\255\255\080\001\081\001\255\255\255\255\084\001\085\001\
\255\255\255\255\255\255\089\001\255\255\091\001\092\001\034\001\
\255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\108\001\109\001\
\110\001\111\001\112\001\113\001\114\001\056\001\255\255\255\255\
\059\001\060\001\061\001\062\001\063\001\064\001\065\001\066\001\
\067\001\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\075\001\076\001\255\255\255\255\255\255\080\001\081\001\255\255\
\255\255\084\001\085\001\255\255\255\255\255\255\089\001\255\255\
\091\001\092\001\034\001\255\255\255\255\255\255\255\255\000\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\108\001\109\001\110\001\111\001\112\001\113\001\114\001\
\056\001\255\255\255\255\059\001\060\001\061\001\062\001\063\001\
\064\001\065\001\066\001\067\001\068\001\069\001\070\001\071\001\
\072\001\255\255\074\001\075\001\076\001\255\255\255\255\255\255\
\080\001\081\001\255\255\255\255\084\001\085\001\255\255\255\255\
\255\255\089\001\255\255\091\001\092\001\034\001\255\255\255\255\
\255\255\255\255\000\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\108\001\109\001\110\001\111\001\
\112\001\113\001\114\001\056\001\255\255\255\255\059\001\060\001\
\061\001\062\001\063\001\064\001\065\001\066\001\067\001\068\001\
\069\001\070\001\071\001\072\001\255\255\074\001\075\001\076\001\
\255\255\255\255\255\255\080\001\081\001\255\255\255\255\084\001\
\085\001\255\255\255\255\255\255\089\001\255\255\091\001\092\001\
\034\001\255\255\255\255\255\255\255\255\000\000\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\108\001\
\109\001\110\001\111\001\112\001\113\001\114\001\056\001\255\255\
\255\255\059\001\060\001\061\001\062\001\063\001\064\001\065\001\
\066\001\067\001\068\001\069\001\070\001\071\001\072\001\255\255\
\074\001\075\001\076\001\255\255\255\255\255\255\080\001\081\001\
\255\255\255\255\084\001\085\001\255\255\255\255\255\255\089\001\
\255\255\091\001\092\001\034\001\255\255\255\255\255\255\255\255\
\000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\108\001\109\001\110\001\111\001\112\001\113\001\
\114\001\056\001\255\255\255\255\059\001\060\001\061\001\062\001\
\063\001\064\001\065\001\066\001\067\001\068\001\069\001\070\001\
\071\001\072\001\255\255\074\001\075\001\076\001\255\255\255\255\
\255\255\080\001\081\001\255\255\255\255\084\001\085\001\255\255\
\255\255\255\255\089\001\255\255\091\001\092\001\034\001\255\255\
\255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\108\001\109\001\110\001\
\111\001\112\001\113\001\114\001\056\001\255\255\255\255\059\001\
\060\001\061\001\062\001\063\001\064\001\065\001\066\001\067\001\
\068\001\069\001\070\001\071\001\072\001\255\255\074\001\075\001\
\076\001\255\255\255\255\255\255\080\001\081\001\255\255\255\255\
\084\001\085\001\255\255\255\255\255\255\089\001\255\255\091\001\
\092\001\034\001\255\255\255\255\255\255\255\255\000\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\108\001\109\001\110\001\111\001\112\001\113\001\114\001\056\001\
\255\255\255\255\059\001\060\001\061\001\062\001\063\001\064\001\
\065\001\066\001\067\001\068\001\069\001\070\001\071\001\072\001\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\255\255\255\255\084\001\085\001\255\255\255\255\255\255\
\089\001\255\255\091\001\092\001\034\001\255\255\255\255\255\255\
\255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\108\001\109\001\110\001\111\001\112\001\
\113\001\114\001\056\001\057\001\255\255\059\001\060\001\061\001\
\062\001\063\001\064\001\065\001\066\001\067\001\068\001\069\001\
\070\001\071\001\072\001\255\255\074\001\075\001\076\001\255\255\
\255\255\255\255\080\001\081\001\255\255\255\255\084\001\255\255\
\255\255\255\255\255\255\089\001\255\255\091\001\092\001\034\001\
\255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\108\001\109\001\
\110\001\111\001\112\001\113\001\114\001\056\001\057\001\255\255\
\059\001\060\001\061\001\062\001\063\001\064\001\065\001\066\001\
\067\001\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\075\001\076\001\255\255\255\255\255\255\080\001\081\001\255\255\
\255\255\084\001\255\255\255\255\255\255\255\255\089\001\255\255\
\091\001\092\001\034\001\255\255\255\255\255\255\255\255\000\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\108\001\109\001\110\001\111\001\112\001\113\001\114\001\
\056\001\255\255\255\255\059\001\060\001\061\001\062\001\063\001\
\064\001\065\001\066\001\067\001\068\001\069\001\070\001\071\001\
\072\001\255\255\074\001\075\001\076\001\255\255\255\255\255\255\
\080\001\081\001\255\255\255\255\084\001\085\001\255\255\255\255\
\255\255\089\001\255\255\091\001\092\001\034\001\255\255\255\255\
\255\255\255\255\000\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\108\001\109\001\110\001\111\001\
\112\001\113\001\114\001\056\001\255\255\255\255\059\001\060\001\
\061\001\062\001\063\001\064\001\065\001\066\001\067\001\068\001\
\069\001\255\255\255\255\255\255\255\255\074\001\075\001\076\001\
\255\255\255\255\255\255\080\001\081\001\255\255\255\255\084\001\
\085\001\255\255\255\255\255\255\089\001\255\255\091\001\092\001\
\034\001\255\255\255\255\255\255\255\255\000\000\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\108\001\
\109\001\110\001\111\001\112\001\113\001\114\001\056\001\255\255\
\255\255\059\001\060\001\061\001\062\001\063\001\064\001\065\001\
\066\001\067\001\068\001\069\001\255\255\255\255\255\255\255\255\
\074\001\075\001\076\001\255\255\255\255\255\255\080\001\081\001\
\255\255\255\255\084\001\085\001\255\255\255\255\255\255\089\001\
\255\255\091\001\092\001\034\001\255\255\255\255\255\255\255\255\
\000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\108\001\109\001\110\001\111\001\112\001\113\001\
\114\001\056\001\255\255\255\255\059\001\060\001\061\001\062\001\
\063\001\064\001\065\001\066\001\067\001\068\001\069\001\255\255\
\255\255\255\255\255\255\074\001\075\001\076\001\255\255\255\255\
\255\255\080\001\081\001\255\255\255\255\084\001\085\001\255\255\
\255\255\255\255\089\001\255\255\091\001\092\001\034\001\255\255\
\255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\108\001\109\001\110\001\
\111\001\112\001\113\001\114\001\056\001\255\255\255\255\059\001\
\060\001\061\001\062\001\063\001\064\001\065\001\066\001\067\001\
\068\001\069\001\255\255\255\255\255\255\255\255\074\001\075\001\
\076\001\255\255\255\255\255\255\080\001\081\001\255\255\255\255\
\084\001\085\001\255\255\255\255\255\255\089\001\255\255\091\001\
\092\001\034\001\255\255\255\255\255\255\255\255\000\000\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\108\001\109\001\110\001\111\001\112\001\113\001\114\001\056\001\
\255\255\255\255\059\001\060\001\061\001\062\001\063\001\064\001\
\065\001\066\001\067\001\255\255\255\255\255\255\255\255\255\255\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\255\255\255\255\084\001\085\001\255\255\255\255\255\255\
\089\001\255\255\091\001\092\001\034\001\255\255\255\255\255\255\
\255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\108\001\109\001\110\001\111\001\112\001\
\113\001\114\001\056\001\255\255\255\255\059\001\060\001\061\001\
\062\001\063\001\064\001\065\001\066\001\067\001\255\255\255\255\
\255\255\255\255\255\255\255\255\074\001\075\001\076\001\255\255\
\255\255\255\255\080\001\081\001\255\255\255\255\084\001\085\001\
\255\255\255\255\255\255\089\001\255\255\091\001\092\001\034\001\
\255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\108\001\109\001\
\110\001\111\001\112\001\113\001\114\001\056\001\255\255\057\001\
\059\001\060\001\061\001\062\001\063\001\064\001\065\001\066\001\
\067\001\255\255\068\001\069\001\070\001\071\001\072\001\074\001\
\075\001\076\001\255\255\255\255\255\255\255\255\080\001\081\001\
\255\255\084\001\085\001\255\255\255\255\255\255\089\001\255\255\
\091\001\092\001\034\001\255\255\255\255\255\255\255\255\000\000\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\108\001\109\001\110\001\111\001\112\001\113\001\114\001\
\056\001\255\255\255\255\059\001\060\001\061\001\062\001\063\001\
\064\001\065\001\066\001\067\001\255\255\255\255\255\255\255\255\
\255\255\255\255\074\001\075\001\076\001\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\
\255\255\089\001\255\255\091\001\092\001\034\001\255\255\255\255\
\255\255\255\255\000\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\108\001\109\001\110\001\111\001\
\112\001\113\001\114\001\056\001\255\255\255\255\059\001\060\001\
\061\001\062\001\063\001\064\001\065\001\066\001\067\001\255\255\
\255\255\255\255\255\255\255\255\000\000\074\001\075\001\076\001\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\084\001\
\085\001\255\255\255\255\255\255\089\001\255\255\091\001\092\001\
\034\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\108\001\
\109\001\110\001\111\001\112\001\113\001\114\001\056\001\255\255\
\255\255\059\001\060\001\061\001\062\001\063\001\064\001\065\001\
\066\001\067\001\255\255\255\255\255\255\255\255\255\255\000\000\
\074\001\075\001\076\001\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\084\001\085\001\255\255\255\255\255\255\089\001\
\255\255\091\001\092\001\034\001\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\108\001\109\001\110\001\111\001\112\001\113\001\
\114\001\056\001\255\255\255\255\059\001\060\001\255\255\255\255\
\255\255\255\255\065\001\066\001\067\001\255\255\255\255\255\255\
\255\255\255\255\255\255\074\001\075\001\076\001\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\084\001\085\001\255\255\
\255\255\255\255\089\001\255\255\091\001\092\001\034\001\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\108\001\109\001\110\001\
\111\001\112\001\113\001\114\001\056\001\255\255\255\255\059\001\
\060\001\255\255\255\255\255\255\255\255\065\001\066\001\067\001\
\255\255\255\255\255\255\255\255\255\255\255\255\074\001\075\001\
\076\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\084\001\085\001\255\255\255\255\255\255\089\001\255\255\091\001\
\092\001\034\001\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\108\001\109\001\110\001\111\001\112\001\113\001\114\001\056\001\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\065\001\066\001\067\001\255\255\255\255\255\255\255\255\255\255\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\084\001\085\001\255\255\255\255\255\255\
\089\001\255\255\091\001\092\001\034\001\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\108\001\109\001\110\001\111\001\112\001\
\113\001\114\001\056\001\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\065\001\066\001\067\001\034\001\255\255\
\255\255\255\255\255\255\255\255\255\255\075\001\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\084\001\085\001\
\255\255\255\255\255\255\089\001\056\001\091\001\092\001\255\255\
\255\255\255\255\255\255\255\255\255\255\065\001\066\001\067\001\
\255\255\255\255\255\255\255\255\255\255\255\255\108\001\109\001\
\110\001\111\001\112\001\113\001\114\001\255\255\255\255\255\255\
\084\001\085\001\255\255\255\255\255\255\089\001\255\255\091\001\
\092\001\034\001\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\108\001\109\001\110\001\111\001\112\001\113\001\114\001\255\255\
\057\001\255\255\059\001\060\001\061\001\062\001\063\001\064\001\
\002\000\255\255\255\255\068\001\069\001\070\001\071\001\072\001\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\019\000\020\000\021\000\022\000\023\000\024\000\025\000\
\026\000\027\000\255\255\255\255\057\001\031\000\255\255\034\001\
\061\001\062\001\063\001\064\001\255\255\255\255\255\255\068\001\
\069\001\070\001\071\001\072\001\255\255\255\255\255\255\255\255\
\255\255\255\255\052\000\080\001\081\001\255\255\057\001\255\255\
\059\001\060\001\061\001\062\001\063\001\064\001\255\255\255\255\
\066\000\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\075\001\076\001\076\000\255\255\078\000\080\001\081\001\255\255\
\255\255\255\255\255\255\255\255\086\000\255\255\255\255\255\255\
\091\001\091\000\092\000\093\000\094\000\095\000\096\000\097\000\
\098\000\099\000\100\000\101\000\102\000\103\000\104\000\105\000\
\106\000\107\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\117\000\255\255\255\255\255\255\255\255\
\255\255\255\255\034\001\255\255\255\255\255\255\128\000\129\000\
\130\000\131\000\132\000\133\000\134\000\135\000\136\000\137\000\
\138\000\139\000\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\147\000\148\000\059\001\060\001\061\001\062\001\063\001\
\064\001\255\255\156\000\255\255\068\001\069\001\070\001\071\001\
\072\001\255\255\074\001\075\001\076\001\255\255\255\255\255\255\
\080\001\081\001\255\255\255\255\255\255\255\255\255\255\255\255\
\001\001\255\255\003\001\255\255\255\255\255\255\255\255\008\001\
\009\001\010\001\011\001\012\001\255\255\255\255\255\255\016\001\
\255\255\018\001\255\255\020\001\021\001\022\001\255\255\255\255\
\202\000\255\255\255\255\255\255\255\255\030\001\208\000\209\000\
\033\001\255\255\035\001\036\001\037\001\038\001\039\001\217\000\
\255\255\255\255\220\000\255\255\045\001\046\001\224\000\048\001\
\255\255\255\255\051\001\052\001\053\001\054\001\055\001\255\255\
\255\255\255\255\236\000\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\068\001\069\001\070\001\255\255\255\255\
\073\001\074\001\255\255\255\255\077\001\255\255\255\255\255\255\
\255\255\255\255\004\001\255\255\085\001\255\255\087\001\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\095\001\096\001\
\255\255\098\001\255\255\255\255\255\255\102\001\255\255\001\001\
\105\001\003\001\255\255\255\255\255\255\255\255\008\001\009\001\
\010\001\011\001\012\001\255\255\255\255\118\001\016\001\255\255\
\018\001\255\255\020\001\021\001\022\001\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\030\001\255\255\255\255\033\001\
\255\255\035\001\036\001\255\255\038\001\255\255\255\255\255\255\
\042\001\255\255\255\255\045\001\046\001\255\255\255\255\255\255\
\255\255\255\255\255\255\053\001\054\001\055\001\255\255\001\001\
\255\255\003\001\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\068\001\069\001\070\001\255\255\255\255\073\001\
\074\001\255\255\255\255\077\001\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\085\001\030\001\255\255\255\255\033\001\
\255\255\255\255\036\001\037\001\038\001\039\001\255\255\255\255\
\255\255\255\255\255\255\045\001\255\255\255\255\048\001\255\255\
\255\255\051\001\255\255\053\001\054\001\055\001\255\255\255\255\
\255\255\255\255\255\255\255\255\118\001\255\255\255\255\255\255\
\255\255\255\255\068\001\069\001\070\001\255\255\255\255\073\001\
\074\001\255\255\255\255\077\001\001\001\255\255\003\001\255\255\
\255\255\255\255\255\255\085\001\255\255\087\001\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\095\001\096\001\255\255\
\098\001\255\255\255\255\255\255\102\001\255\255\001\001\105\001\
\003\001\030\001\255\255\255\255\033\001\255\255\255\255\036\001\
\037\001\038\001\039\001\255\255\255\255\255\255\255\255\255\255\
\045\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\053\001\054\001\055\001\030\001\031\001\255\255\033\001\255\255\
\255\255\036\001\255\255\038\001\255\255\255\255\255\255\068\001\
\069\001\070\001\045\001\255\255\073\001\074\001\255\255\255\255\
\077\001\255\255\053\001\054\001\055\001\255\255\255\255\001\001\
\085\001\003\001\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\068\001\069\001\070\001\255\255\255\255\073\001\074\001\
\255\255\255\255\077\001\255\255\255\255\255\255\255\255\255\255\
\255\255\001\001\085\001\003\001\030\001\255\255\032\001\033\001\
\255\255\255\255\036\001\057\001\038\001\059\001\060\001\061\001\
\062\001\063\001\064\001\045\001\255\255\255\255\068\001\069\001\
\070\001\071\001\072\001\053\001\054\001\055\001\030\001\255\255\
\255\255\033\001\080\001\081\001\036\001\255\255\038\001\255\255\
\255\255\255\255\068\001\069\001\070\001\045\001\255\255\073\001\
\074\001\255\255\255\255\077\001\255\255\053\001\054\001\055\001\
\255\255\255\255\001\001\085\001\003\001\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\068\001\069\001\070\001\255\255\
\255\255\073\001\074\001\255\255\255\255\077\001\255\255\255\255\
\255\255\255\255\255\255\255\255\001\001\085\001\003\001\030\001\
\255\255\255\255\033\001\255\255\255\255\036\001\255\255\038\001\
\255\255\255\255\255\255\255\255\255\255\255\255\045\001\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\053\001\054\001\
\055\001\030\001\255\255\255\255\033\001\255\255\255\255\036\001\
\255\255\038\001\255\255\255\255\255\255\068\001\069\001\070\001\
\045\001\255\255\073\001\074\001\255\255\255\255\077\001\255\255\
\053\001\054\001\055\001\255\255\255\255\255\255\085\001\255\255\
\034\001\255\255\255\255\255\255\255\255\255\255\255\255\068\001\
\069\001\070\001\255\255\255\255\073\001\074\001\255\255\255\255\
\077\001\255\255\255\255\255\255\255\255\255\255\255\255\057\001\
\085\001\059\001\060\001\061\001\062\001\063\001\064\001\255\255\
\255\255\255\255\068\001\069\001\070\001\071\001\072\001\034\001\
\074\001\075\001\076\001\255\255\255\255\255\255\080\001\081\001\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\092\001\255\255\255\255\255\255\057\001\255\255\
\059\001\060\001\061\001\062\001\063\001\064\001\255\255\255\255\
\034\001\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\075\001\076\001\255\255\255\255\255\255\080\001\081\001\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\057\001\
\091\001\059\001\060\001\061\001\062\001\063\001\064\001\255\255\
\255\255\034\001\068\001\069\001\070\001\071\001\072\001\255\255\
\074\001\075\001\076\001\255\255\255\255\255\255\080\001\081\001\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\057\001\091\001\059\001\060\001\061\001\062\001\063\001\064\001\
\255\255\255\255\034\001\068\001\069\001\070\001\071\001\072\001\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\057\001\091\001\059\001\060\001\061\001\062\001\063\001\
\064\001\255\255\255\255\034\001\068\001\069\001\070\001\071\001\
\072\001\255\255\074\001\075\001\076\001\255\255\255\255\255\255\
\080\001\081\001\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\057\001\091\001\059\001\060\001\061\001\062\001\
\063\001\064\001\255\255\255\255\034\001\068\001\069\001\070\001\
\071\001\072\001\255\255\074\001\075\001\076\001\255\255\255\255\
\255\255\080\001\081\001\255\255\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\057\001\091\001\059\001\060\001\061\001\
\062\001\063\001\064\001\255\255\255\255\034\001\068\001\069\001\
\070\001\071\001\072\001\255\255\074\001\075\001\076\001\255\255\
\255\255\255\255\080\001\081\001\255\255\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\057\001\091\001\059\001\060\001\
\061\001\062\001\063\001\064\001\255\255\255\255\034\001\068\001\
\069\001\070\001\071\001\072\001\255\255\074\001\075\001\076\001\
\255\255\255\255\255\255\080\001\081\001\255\255\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\057\001\091\001\059\001\
\060\001\061\001\062\001\063\001\064\001\255\255\255\255\034\001\
\068\001\069\001\070\001\071\001\072\001\255\255\074\001\075\001\
\076\001\255\255\255\255\255\255\080\001\081\001\255\255\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\057\001\091\001\
\059\001\060\001\061\001\062\001\063\001\064\001\255\255\255\255\
\034\001\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\075\001\076\001\255\255\255\255\255\255\080\001\081\001\255\255\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\057\001\
\091\001\059\001\060\001\061\001\062\001\063\001\064\001\255\255\
\255\255\034\001\068\001\069\001\070\001\071\001\072\001\255\255\
\074\001\075\001\076\001\255\255\255\255\255\255\080\001\081\001\
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\057\001\091\001\059\001\060\001\061\001\062\001\063\001\064\001\
\255\255\255\255\034\001\068\001\069\001\070\001\071\001\072\001\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
\255\255\057\001\091\001\059\001\060\001\061\001\062\001\063\001\
\064\001\034\001\255\255\255\255\068\001\069\001\070\001\071\001\
\072\001\255\255\074\001\075\001\076\001\255\255\255\255\255\255\
\080\001\081\001\255\255\255\255\255\255\255\255\255\255\255\255\
\057\001\089\001\059\001\060\001\061\001\062\001\063\001\064\001\
\034\001\255\255\255\255\068\001\069\001\070\001\071\001\072\001\
\255\255\074\001\075\001\076\001\255\255\255\255\255\255\080\001\
\081\001\255\255\255\255\084\001\255\255\255\255\255\255\057\001\
\255\255\059\001\060\001\061\001\062\001\063\001\064\001\034\001\
\255\255\255\255\068\001\069\001\070\001\071\001\072\001\255\255\
\074\001\075\001\076\001\255\255\255\255\255\255\080\001\081\001\
\255\255\255\255\084\001\255\255\255\255\255\255\057\001\255\255\
\059\001\060\001\061\001\062\001\063\001\064\001\034\001\255\255\
\255\255\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\075\001\076\001\255\255\255\255\255\255\080\001\081\001\255\255\
\255\255\084\001\255\255\255\255\255\255\057\001\255\255\059\001\
\060\001\061\001\062\001\063\001\064\001\034\001\255\255\255\255\
\068\001\069\001\070\001\071\001\072\001\255\255\074\001\075\001\
\076\001\255\255\255\255\255\255\080\001\081\001\255\255\255\255\
\084\001\255\255\255\255\255\255\057\001\255\255\059\001\060\001\
\061\001\062\001\063\001\064\001\034\001\255\255\255\255\068\001\
\069\001\070\001\071\001\072\001\255\255\074\001\075\001\076\001\
\255\255\255\255\255\255\080\001\081\001\255\255\255\255\255\255\
\255\255\255\255\255\255\057\001\255\255\059\001\060\001\061\001\
\062\001\063\001\064\001\255\255\255\255\255\255\068\001\069\001\
\070\001\071\001\072\001\255\255\074\001\075\001\076\001\255\255\
\255\255\255\255\080\001\081\001\057\001\255\255\059\001\060\001\
\061\001\062\001\063\001\064\001\255\255\255\255\255\255\068\001\
\069\001\070\001\071\001\072\001\255\255\074\001\075\001\076\001\
\255\255\255\255\255\255\080\001\081\001\057\001\255\255\059\001\
\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\
\068\001\069\001\070\001\071\001\072\001\255\255\074\001\255\255\
\076\001\255\255\255\255\255\255\080\001\081\001\057\001\255\255\
\059\001\060\001\061\001\062\001\063\001\064\001\255\255\255\255\
\255\255\068\001\069\001\070\001\071\001\072\001\255\255\074\001\
\255\255\255\255\255\255\255\255\255\255\080\001\081\001"

let yynames_const = "\
  EOF\000\
  CHAR\000\
  INT\000\
  DOUBLE\000\
  FLOAT\000\
  VOID\000\
  INT64\000\
  INT32\000\
  ENUM\000\
  STRUCT\000\
  TYPEDEF\000\
  UNION\000\
  SIGNED\000\
  UNSIGNED\000\
  LONG\000\
  SHORT\000\
  VOLATILE\000\
  EXTERN\000\
  STATIC\000\
  CONST\000\
  RESTRICT\000\
  AUTO\000\
  REGISTER\000\
  SIZEOF\000\
  ALIGNOF\000\
  EQ\000\
  ARROW\000\
  DOT\000\
  EQ_EQ\000\
  EXCLAM_EQ\000\
  INF\000\
  SUP\000\
  INF_EQ\000\
  SUP_EQ\000\
  MINUS_EQ\000\
  PLUS_EQ\000\
  STAR_EQ\000\
  PLUS\000\
  MINUS\000\
  STAR\000\
  SLASH\000\
  PERCENT\000\
  TILDE\000\
  AND\000\
  PIPE\000\
  CIRC\000\
  EXCLAM\000\
  AND_AND\000\
  PIPE_PIPE\000\
  INF_INF\000\
  SUP_SUP\000\
  PLUS_PLUS\000\
  MINUS_MINUS\000\
  RPAREN\000\
  LPAREN\000\
  RBRACE\000\
  LBRACE\000\
  LBRACKET\000\
  RBRACKET\000\
  COLON\000\
  SEMICOLON\000\
  COMMA\000\
  ELLIPSIS\000\
  QUEST\000\
  BREAK\000\
  CONTINUE\000\
  GOTO\000\
  RETURN\000\
  SWITCH\000\
  CASE\000\
  DEFAULT\000\
  WHILE\000\
  DO\000\
  FOR\000\
  IF\000\
  THEN\000\
  ELSE\000\
  SLASH_EQ\000\
  PERCENT_EQ\000\
  AND_EQ\000\
  PIPE_EQ\000\
  CIRC_EQ\000\
  INF_INF_EQ\000\
  SUP_SUP_EQ\000\
  ATTRIBUTE\000\
  INLINE\000\
  ASM\000\
  TYPEOF\000\
  FUNCTION__\000\
  PRETTY_FUNCTION__\000\
  LABEL__\000\
  BUILTIN_VA_ARG\000\
  BUILTIN_VA_LIST\000\
  BLOCKATTRIBUTE\000\
  DECLSPEC\000\
  PRAGMA\000\
  "

let yynames_block = "\
  IDENT\000\
  CST_CHAR\000\
  CST_INT\000\
  CST_FLOAT\000\
  CST_STRING\000\
  CST_WSTRING\000\
  NAMED_TYPE\000\
  ARG_e\000\
  ARG_eo\000\
  ARG_E\000\
  ARG_u\000\
  ARG_b\000\
  ARG_t\000\
  ARG_d\000\
  ARG_lo\000\
  ARG_l\000\
  ARG_i\000\
  ARG_o\000\
  ARG_va\000\
  ARG_f\000\
  ARG_F\000\
  ARG_A\000\
  ARG_v\000\
  ARG_k\000\
  ARG_c\000\
  ARG_s\000\
  ARG_p\000\
  ARG_P\000\
  ARG_I\000\
  ARG_S\000\
  ARG_g\000\
  MSASM\000\
  MSATTR\000\
  "

let yyact = [|
  (fun _ -> failwith "parser")
; (fun __caml_parser_env ->
    Obj.repr(
# 338 "src/formatparse.mly"
               (  )
# 1666 "src/formatparse.ml"
               : unit))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 345 "src/formatparse.mly"
                       (  (* Count arguments eagerly *) 
                            let currentArg = _1 in 
                            ((fun args ->
                               match getArg currentArg args with 
                                   Fe e -> e
                                 | a -> wrongArgType currentArg 
                                            "expression" a),

                             (fun e -> Some [ Fe e ]))
                         )
# 1682 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 356 "src/formatparse.mly"
                   ( _1 )
# 1689 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    Obj.repr(
# 359 "src/formatparse.mly"
                        ( ((fun args -> Lval ((fst _1) args)),

                             (fun e -> match e with 
                                Lval l -> (snd _1) l 
                              | _ -> None))
                         )
# 1701 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 367 "src/formatparse.mly"
          ( ((fun args -> SizeOfE ((fst _2) args)),

                           fun e -> match e with 
                             SizeOfE e' -> (snd _2) e'
                           | _ -> None)
                        )
# 1713 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)) in
    Obj.repr(
# 375 "src/formatparse.mly"
                        ( ((fun args -> SizeOf ((fst _3) args)),
                          
                           (fun e -> match e with 
                              SizeOf t -> (snd _3) t
                           |  _ -> None))
                        )
# 1725 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 383 "src/formatparse.mly"
          ( ((fun args -> AlignOfE ((fst _2) args)),

                           (fun e -> match e with
                             AlignOfE e' -> (snd _2) e' | _ -> None))
                        )
# 1736 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)) in
    Obj.repr(
# 390 "src/formatparse.mly"
          ( ((fun args -> AlignOf ((fst _3) args)),

                           (fun e -> match e with
                             AlignOf t' -> (snd _3) t' | _ -> None))
                        )
# 1747 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 397 "src/formatparse.mly"
          ( _2 )
# 1754 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 399 "src/formatparse.mly"
          ( doUnop Neg _2 )
# 1761 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 402 "src/formatparse.mly"
          ( doUnop LNot _2 )
# 1768 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 405 "src/formatparse.mly"
          ( doUnop BNot _2 )
# 1775 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'argu) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 408 "src/formatparse.mly"
                        ( ((fun args -> 
                             let e = (fst _2) args in
                             UnOp((fst _1) args, e, typeOf e)),

                           (fun e -> match e with 
                             UnOp(uo, e', _) -> begin
                               match (snd _1) uo, (snd _2) e' with 
                                 Some m1, Some m2 -> Some (m1 @ m2)
                               | _ -> None
                             end
                           | _ -> None))
                        )
# 1794 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 423 "src/formatparse.mly"
          ( ((fun args -> 
                             match (fst _2) args with
                                Lval l -> mkAddrOf l
                              | _ -> E.s (bug "AddrOf applied to a non lval")),
                          (fun e -> match e with 
                            AddrOf l -> (snd _2) (Lval l)
                          | e -> (snd _2) (Lval (mkMem e NoOffset))))
                         )
# 1808 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 433 "src/formatparse.mly"
                        ( _2 )
# 1815 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 436 "src/formatparse.mly"
   ( ((fun args -> buildPlus ((fst _1) args) 
                                                  ((fst _3) args)), 
                          (fun e -> match e with 
                            BinOp((PlusPI|PlusA), e1, e2, _) -> begin
                              match (snd _1) e1, (snd _3) e2 with
                                Some m1, Some m2 -> Some (m1 @ m2)
                              | _, _ -> None
                            end
                          | _ -> None))
                        )
# 1832 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 448 "src/formatparse.mly"
                        ( ((fun args -> buildMinus ((fst _1) args)
                                                   ((fst _3) args)),

                           (fun e -> match e with 
                             BinOp((MinusPP|MinusPI|MinusA), e1, e2, _) -> 
                               begin
                                 match (snd _1) e1, (snd _3) e2 with
                                   Some m1, Some m2 -> Some (m1 @ m2)
                                 | _, _ -> None
                               end
                           | _ -> None))
                        )
# 1851 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'argb) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 461 "src/formatparse.mly"
                        ( ((fun args -> 
                               let e1 = (fst _1) args in 
                               let bop = (fst _2) args in
                               let e2 = (fst _3) args in 
                               let t1 = typeOf e1 in
                               BinOp(bop, e1, e2, t1)),
                           
                           (fun e -> match e with 
                             BinOp(bop, e1, e2, _) -> begin
                               match (snd _1) e1,(snd _2) bop,(snd _3) e2 with
                                 Some m1, Some m2, Some m3 -> 
                                   Some (m1 @ m2 @ m3)
                               | _, _, _ -> None
                             end
                           | _ -> None))
                        )
# 1875 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 479 "src/formatparse.mly"
   ( doBinop Mult _1 _3 )
# 1883 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 481 "src/formatparse.mly"
   ( doBinop Div _1 _3 )
# 1891 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 483 "src/formatparse.mly"
   ( doBinop Mod _1 _3 )
# 1899 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 485 "src/formatparse.mly"
   ( doBinop Shiftlt _1 _3 )
# 1907 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 487 "src/formatparse.mly"
   ( doBinop Shiftrt _1 _3 )
# 1915 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 489 "src/formatparse.mly"
   ( doBinop BAnd _1 _3 )
# 1923 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 491 "src/formatparse.mly"
   ( doBinop BOr _1 _3 )
# 1931 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 493 "src/formatparse.mly"
   ( doBinop BXor _1 _3 )
# 1939 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 495 "src/formatparse.mly"
   ( doBinop Eq _1 _3 )
# 1947 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 497 "src/formatparse.mly"
   ( doBinop Ne _1 _3 )
# 1955 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 499 "src/formatparse.mly"
   ( doBinop Lt _1 _3 )
# 1963 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 501 "src/formatparse.mly"
   ( doBinop Gt _1 _3 )
# 1971 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 503 "src/formatparse.mly"
   ( doBinop Le _1 _3 )
# 1979 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 505 "src/formatparse.mly"
   ( doBinop Ge _1 _3 )
# 1987 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)) in
    let _4 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 508 "src/formatparse.mly"
           ( ((fun args -> 
                              let t = (fst _2) args in
                              let e = (fst _4) args in
                              mkCast e t),
                            
                            (fun e -> 
                              let t', e' = 
                                match e with 
                                  CastE (t', e') -> t', e'
                                | _ -> typeOf e, e
                              in
                              match (snd _2) t', (snd _4 e') with
                                Some m1, Some m2 -> Some (m1 @ m2)
                              | _, _ -> None))
                         )
# 2009 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 527 "src/formatparse.mly"
                       ( let currentArg = _1 in
                         ((fun args ->
                           match getArg currentArg args with
                             Fu uo -> uo
                           | a -> wrongArgType currentArg "unnop" a),

                          fun uo -> Some [ Fu uo ])
                       )
# 2023 "src/formatparse.ml"
               : 'argu))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 538 "src/formatparse.mly"
                       ( let currentArg = _1 in
                         ((fun args ->
                           match getArg currentArg args with
                             Fb bo -> bo
                           | a -> wrongArgType currentArg "binop" a),

                          fun bo -> Some [ Fb bo ])
                       )
# 2037 "src/formatparse.ml"
               : 'argb))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 549 "src/formatparse.mly"
                       ( let currentArg = _1 in
                           ((fun args ->
                             match getArg currentArg args with
                               Fd n -> integer n
                              | a -> wrongArgType currentArg "integer" a),

                            fun e -> match e with 
                              Const(CInt64(n, _, _)) -> 
                                Some [ Fd (Int64.to_int n) ]
                            | _ -> None) 
                         )
# 2054 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 561 "src/formatparse.mly"
                      ( let currentArg = _1 in
                        ((fun args ->
                             match getArg currentArg args with
                               Fg s -> Const(CStr s)
                              | a -> wrongArgType currentArg "string" a),

                            fun e -> match e with 
                              Const(CStr s) ->
                                Some [ Fg s ]
                            | _ -> None) 
                         )
# 2071 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 572 "src/formatparse.mly"
                         ( let n = parseInt _1 in
                           ((fun args -> n),

                            (fun e -> match e, n with 
                              Const(CInt64(e', _, _)), 
                              Const(CInt64(n', _, _)) when e' = n' -> Some []
                            | _ -> None))
                         )
# 2085 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 585 "src/formatparse.mly"
                      ( let currentArg = _1 in
                           ((fun args -> 
                                match getArg currentArg args with 
                                  Fl l -> l
                                | Fv v -> Var v, NoOffset
                                | a -> wrongArgType currentArg "lval" a),

                            fun l -> Some [ Fl l ])
                         )
# 2100 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'argv) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)) in
    Obj.repr(
# 596 "src/formatparse.mly"
                         ( ((fun args -> 
                              let v = (fst _1) args in
                               (Var v, (fst _2) v.vtype args)),

                            (fun l -> match l with 
                              Var vi, off -> begin
                                match (snd _1) vi, (snd _2) off with 
                                  Some m1, Some m2 -> Some (m1 @ m2)
                                | _ -> None
                              end
                            | _ -> None))
                         )
# 2119 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 609 "src/formatparse.mly"
                         ( ((fun args -> mkMem ((fst _2) args) NoOffset),

                           (fun l -> match l with 
                              Mem e, NoOffset -> (snd _2) e
                           | _, _ -> None))
                         )
# 2131 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in
    let _4 = (Parsing.peek_val __caml_parser_env 0 : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)) in
    Obj.repr(
# 617 "src/formatparse.mly"
             ( ((fun args -> 
                   let e = (fst _1) args in
                   let baset = 
                     match unrollTypeDeep (typeOf e) with 
                       TPtr (t, _) -> t
                     | _ -> E.s (bug "Expecting a pointer for field %s\n" _3)
                   in
                   let fi = getField baset _3 in
                   mkMem e (Field(fi, (fst _4) fi.ftype args))),

                (fun l -> match l with 
                   Mem e, Field(fi, off) when fi.fname = _3 -> begin
                     match (snd _1) e, (snd _4) off with 
                       Some m1, Some m2 -> Some (m1 @ m2)
                     | _, _ -> None
                   end
                | _, _ -> None))
             )
# 2157 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _5 = (Parsing.peek_val __caml_parser_env 0 : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)) in
    Obj.repr(
# 637 "src/formatparse.mly"
             ( ((fun args -> 
                 let e = (fst _3) args in
                 let baset = 
                   match unrollTypeDeep (typeOf e) with 
                     TPtr (t, _) -> t
                   | _ -> E.s (bug "Expecting a pointer\n")
                 in
                 mkMem e ((fst _5) baset args)),

                (fun l -> match l with 
                  Mem e, off -> begin
                    match (snd _3) e, (snd _5 off) with 
                      Some m1, Some m2 -> Some (m1 @ m2)
                    | _, _ -> None
                  end
                | _, _ -> None))
              )
# 2181 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 657 "src/formatparse.mly"
                       ( let currentArg = _1 in
                         ((fun args ->
                           match getArg currentArg args with
                             Fv v -> v
                           | a -> wrongArgType currentArg "varinfo" a),

                          fun v -> Some [ Fv v ])
                       )
# 2195 "src/formatparse.ml"
               : 'argv))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 665 "src/formatparse.mly"
                       ( let currentArg = _1 in
                         ((fun args -> 
                           match getArg currentArg args with 
                             Fv v -> v
                           | a -> wrongArgType currentArg "varinfo" a),
                         (fun v -> 
                             E.s (bug "identifiers (%s) are not supported for deconstruction" currentArg)))
                       )
# 2209 "src/formatparse.ml"
               : 'argv))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 678 "src/formatparse.mly"
                     ( let currentArg = _1 in
                            ((fun t args -> 
                                match getArg currentArg args with 
                                  Fo o -> o
                                | a -> wrongArgType currentArg "offset" a),

                              (fun off -> Some [ Fo off ]))
                          )
# 2223 "src/formatparse.ml"
               : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 687 "src/formatparse.mly"
                          ( ((fun t args -> NoOffset),

                             (fun off -> match off with 
                                NoOffset -> Some []
                              | _ -> None))
                          )
# 2234 "src/formatparse.ml"
               : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)) in
    Obj.repr(
# 694 "src/formatparse.mly"
                          ( ((fun t args -> 
                                let fi = getField t _2 in
                                Field (fi, (fst _3) fi.ftype args)),

                            (fun off -> match off with 
                               Field (fi, off') when fi.fname = _2 -> 
                                 (snd _3) off'
                            | _ -> None))
                          )
# 2250 "src/formatparse.ml"
               : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _4 = (Parsing.peek_val __caml_parser_env 0 : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)) in
    Obj.repr(
# 705 "src/formatparse.mly"
                   ( ((fun t args -> 
                     let bt = 
                       match unrollType t with 
                         TArray(bt, _, _) -> bt 
                       | _ -> E.s (error "Formatcil: expecting an array for index")
                     in
                     let e = (fst _2) args in 
                     Index(e, (fst _4) bt args)),

                    (fun off -> match off with 
                      Index (e, off') -> begin
                        match (snd _2) e, (snd _4) off with 
                          Some m1, Some m2 -> Some (m1 @ m2)
                        | _, _ -> None
                      end
                    | _ -> None))
                    )
# 2274 "src/formatparse.ml"
               : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'one_formal) in
    Obj.repr(
# 726 "src/formatparse.mly"
                      ( ((fun args -> 
                            let (_, ft, _) = (fst _1) args in
                            ft),

                         (fun t -> (snd _1) ("", t, [])))
                      )
# 2286 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)) in
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'attributes) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'decl) in
    Obj.repr(
# 737 "src/formatparse.mly"
                   ( ((fun args -> 
                        let tal = (fst _2) args in
                        let ts = (fst _1) tal args in
                        let (fn, ft, _) = (fst _3) ts args in
                        (fn, ft, [])),

                      (fun (fn, ft, fa) -> 
                         match (snd _3) (fn, ft) with 
                           Some (restt, m3) -> begin
                             match (snd _1) restt, 
                                   (snd _2) (typeAttrs restt)with
                               Some m1, Some m2 -> 
                                 Some (m1 @ m2 @ m3)
                             | _, _ -> None
                           end
                         | _ -> None))
                   )
# 2311 "src/formatparse.ml"
               : 'one_formal))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 756 "src/formatparse.mly"
                   ( let currentArg = _1 in
                     ((fun args -> 
                         match getArg currentArg args with
                          Ff (fn, ft, fa) -> (fn, ft, fa)
                         | a  -> wrongArgType currentArg "formal" a),

                      (fun (fn, ft, fa) -> Some [ Ff (fn, ft, fa) ]))
                   )
# 2325 "src/formatparse.ml"
               : 'one_formal))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 767 "src/formatparse.mly"
                ( let currentArg = _1 in
                     ((fun al args -> 
                       match getArg currentArg args with 
                          Ft t -> typeAddAttributes al t
                       | a -> wrongArgType currentArg "type" a),
                      
                      (fun t -> Some [ Ft t ]))
                      )
# 2339 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 776 "src/formatparse.mly"
                    ( ((fun al args -> TVoid al),

                       (fun t -> match unrollType t with 
                           TVoid _ -> Some []
                         | _ -> None)) )
# 2349 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 782 "src/formatparse.mly"
                    ( let currentArg = _1 in
                      ((fun al args -> 
                        match getArg currentArg args with 
                          Fk ik -> TInt(ik, al)
                        | a -> wrongArgType currentArg "ikind" a),

                       (fun t -> match unrollType t with 
                         TInt(ik, _) -> Some [ Fk ik ]
                       | _ -> None))
                    )
# 2365 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 793 "src/formatparse.mly"
                    ( ((fun al args -> TInt(IChar, al)),
                       (matchIntType IChar)) )
# 2372 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 795 "src/formatparse.mly"
                    ( ((fun al args -> TInt(IUChar, al)), 
                       matchIntType IUChar) )
# 2379 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 798 "src/formatparse.mly"
                    ( ((fun al args -> TInt(IShort, al)), 
                       matchIntType IShort) )
# 2386 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 800 "src/formatparse.mly"
                    ( ((fun al args -> TInt(IUShort, al)), 
                       matchIntType IUShort) )
# 2393 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 803 "src/formatparse.mly"
                    ( ((fun al args -> TInt(IInt, al)), 
                       matchIntType IInt) )
# 2400 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 805 "src/formatparse.mly"
                    ( ((fun al args -> TInt(IUInt, al)), matchIntType IUInt) )
# 2406 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 807 "src/formatparse.mly"
                     ( ((fun al args -> TInt(ILong, al)), 
                        matchIntType ILong) )
# 2413 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 809 "src/formatparse.mly"
                     ( ((fun al args -> TInt(IULong, al)), 
                        matchIntType IULong) )
# 2420 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 812 "src/formatparse.mly"
                       ( ((fun al args -> TInt(ILongLong, al)), 
                          
                          matchIntType ILongLong)
                        )
# 2429 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 816 "src/formatparse.mly"
                          ( ((fun al args -> TInt(IULongLong, al)),

                             matchIntType IULongLong)
                           )
# 2438 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 821 "src/formatparse.mly"
                    ( ((fun al args -> TFloat(FFloat, al)),
                       matchFloatType FFloat) 
                    )
# 2446 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 824 "src/formatparse.mly"
                    ( ((fun al args -> TFloat(FDouble, al)),
                       matchFloatType FDouble) )
# 2453 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 827 "src/formatparse.mly"
                 ( let currentArg = _2 in
                      ((fun al args -> 
                         match getArg currentArg args with 
                           Fc ci -> TComp(ci, al)
                         | a -> wrongArgType currentArg "compinfo" a),

                        (fun t -> match unrollType t with 
                            TComp(ci, _) -> Some [ Fc ci ]
                          | _ -> None))
                    )
# 2469 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 837 "src/formatparse.mly"
                ( let currentArg = _2 in
                     ((fun al args -> 
                         match getArg currentArg args with 
                           Fc ci -> TComp(ci, al)
                         | a -> wrongArgType currentArg "compinfo" a),

                        (fun t -> match unrollType t with 
                            TComp(ci, _) -> Some [ Fc ci ]
                          | _ -> None))

                   )
# 2486 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 850 "src/formatparse.mly"
                   ( ((fun al args -> typeAddAttributes al 
                                        (typeOf ((fst _3) args))),
                    
                      (fun t -> E.s (bug "Cannot match typeof(e)\n")))
                   )
# 2497 "src/formatparse.ml"
               : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'attributes) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'decl) in
    Obj.repr(
# 859 "src/formatparse.mly"
                    ( ((fun ts args -> 
                         let al = (fst _2) args in
                         (fst _3) (TPtr(ts, al)) args),

                       (fun (fn, ft) -> 
                         match (snd _3) (fn, ft) with 
                           Some (TPtr(bt, al), m2) -> begin
                             match (snd _2) al with 
                               Some m1 -> Some (bt, m1 @ m2)
                             | _ -> None
                           end
                         | _ -> None))
                    )
# 2517 "src/formatparse.ml"
               : 'decl))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'direct_decl) in
    Obj.repr(
# 873 "src/formatparse.mly"
                ( _1 )
# 2524 "src/formatparse.ml"
               : 'decl))
; (fun __caml_parser_env ->
    Obj.repr(
# 877 "src/formatparse.mly"
                   ( ((fun ts args -> ("", ts, [])),

                      (* Match any name in this case *)
                      (fun (fn, ft) -> 
                         Some (unrollType ft, [])))
                   )
# 2535 "src/formatparse.ml"
               : 'direct_decl))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 884 "src/formatparse.mly"
                   ( ((fun ts args -> (_1, ts, [])),

                      (fun (fn, ft) -> 
                        if fn = "" || fn = _1 then 
                          Some (unrollType ft, []) 
                        else 
                          None))
                   )
# 2549 "src/formatparse.ml"
               : 'direct_decl))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'decl) in
    Obj.repr(
# 894 "src/formatparse.mly"
                   ( ((fun ts args -> 
                          let al = (fst _2) args in
                          (fst _3) (typeAddAttributes al ts) args),

                      (fun (fn, ft) -> begin
                        match (snd _3) (fn, ft) with
                          Some (restt, m2) -> begin
                            match (snd _2) (typeAttrs restt) with 
                              Some m1 -> Some (restt, m1 @ m2)
                            | _ -> None
                          end
                        | _ -> None
                      end))
                   )
# 2570 "src/formatparse.ml"
               : 'direct_decl))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : 'direct_decl) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'exp_opt) in
    Obj.repr(
# 910 "src/formatparse.mly"
                   ( ((fun ts args -> 
                        (fst _1) (TArray(ts, (fst _3) args, [])) args),

                     (fun (fn, ft) -> 
                       match (snd _1) (fn, ft) with 
                         Some (TArray(bt, lo, _), m1) -> begin
                           match (snd _3) lo with 
                             Some m2 -> Some (unrollType bt, m1 @ m2)
                           | _ -> None
                         end 
                       | _ -> None))
                   )
# 2589 "src/formatparse.ml"
               : 'direct_decl))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in
    let _3 = (Parsing.peek_val __caml_parser_env 4 : 'decl) in
    let _6 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> (string * Cil.typ * Cil.attributes) list option * bool) * ((string * Cil.typ * Cil.attributes) list option * bool -> Cil.formatArg list option)) in
    Obj.repr(
# 926 "src/formatparse.mly"
                   ( ((fun ts args -> 
                        let al = (fst _2) args in
                        let pars, isva = (fst _6) args in
                        (fst _3) (TFun(ts, pars, isva, al)) args),

                      (fun (fn, ft) -> 
                         match (snd _3) (fn, ft) with 
                           Some (TFun(rt, args, isva, al), m1) -> begin
                             match (snd _2) al, (snd _6) (args, isva) with 
                               Some m2, Some m6 
                               -> Some (unrollType rt, m1 @ m2 @ m6)
                             | _ -> None
                           end
                         | _ -> None))
                   )
# 2612 "src/formatparse.ml"
               : 'direct_decl))
; (fun __caml_parser_env ->
    Obj.repr(
# 944 "src/formatparse.mly"
                   ( ((fun args -> (None, false)),

                     (* Match any formals *)
                      (fun (pars, isva) -> 
                        match pars, isva with 
                          (_, false) -> Some [] 
                        | _ -> None))
                   )
# 2625 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> (string * Cil.typ * Cil.attributes) list option * bool) * ((string * Cil.typ * Cil.attributes) list option * bool -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'parameters_ne) in
    Obj.repr(
# 953 "src/formatparse.mly"
                   ( ((fun args -> 
                        let (pars : (string * typ * attributes) list), 
                            (isva : bool) = (fst _1) args in
                        (Some pars), isva),

                     (function 
                         ((Some pars), isva) -> (snd _1) (pars, isva)
                       |  _ -> None))
                   )
# 2640 "src/formatparse.ml"
               : ((string * Cil.formatArg) list -> (string * Cil.typ * Cil.attributes) list option * bool) * ((string * Cil.typ * Cil.attributes) list option * bool -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    Obj.repr(
# 965 "src/formatparse.mly"
                   ( ((fun args -> ([], true)),

                      (function 
                          ([], true) -> Some [] 
                        | _ -> None))
                   )
# 2651 "src/formatparse.ml"
               : 'parameters_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 972 "src/formatparse.mly"
                   ( let currentArg = _1 in
                     ((fun args -> 
                       match getArg currentArg args with
                         Fva isva -> ([], isva)
                       | a -> wrongArgType currentArg "vararg" a),

                     (function 
                         ([], isva) -> Some [ Fva isva ] 
                       | _ -> None))
                   )
# 2667 "src/formatparse.ml"
               : 'parameters_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 983 "src/formatparse.mly"
                   ( let currentArg = _1 in
                     ((fun args -> 
                       match getArg currentArg args with
                        FF fl -> ( fl, false)
                       | a  -> wrongArgType currentArg "formals" a),

                      (function 
                          (pars, false) -> Some [ FF pars ] 
                        | _ -> None))
                   )
# 2683 "src/formatparse.ml"
               : 'parameters_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'one_formal) in
    Obj.repr(
# 994 "src/formatparse.mly"
                   ( ((fun args -> ([(fst _1) args], false)),

                     (function 
                         ([ f ], false) -> (snd _1) f 
                       | _ -> None))
                   )
# 2695 "src/formatparse.ml"
               : 'parameters_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'one_formal) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'parameters_ne) in
    Obj.repr(
# 1003 "src/formatparse.mly"
                   ( ((fun args -> 
                        let this = (fst _1) args in
                        let (rest, isva) = (fst _3) args in
                        (this :: rest, isva)),

                      (function 
                          ((f::rest, isva)) -> begin
                            match (snd _1) f, (snd _3) (rest, isva) with 
                              Some m1, Some m2 -> Some (m1 @ m2)
                            | _, _ -> None
                          end
                        | _ -> None))
                   )
# 2715 "src/formatparse.ml"
               : 'parameters_ne))
; (fun __caml_parser_env ->
    Obj.repr(
# 1023 "src/formatparse.mly"
                   ( ((fun args -> None),
                      (* Match anything if the pattern does not have a len *)
                      (fun _ -> Some [])) )
# 2723 "src/formatparse.ml"
               : 'exp_opt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1027 "src/formatparse.mly"
                   ( ((fun args -> Some ((fst _1) args)),

                      (fun lo -> match lo with
                        Some e -> (snd _1) e
                      | _ -> None))
                   )
# 2735 "src/formatparse.ml"
               : 'exp_opt))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1033 "src/formatparse.mly"
                   ( let currentArg = _1 in
                     ((fun args ->
                       match getArg currentArg args with
                         Feo lo -> lo
                       | a -> wrongArgType currentArg "exp_opt" a),

                      fun lo -> Some [ Feo lo ])
                   )
# 2749 "src/formatparse.ml"
               : 'exp_opt))
; (fun __caml_parser_env ->
    Obj.repr(
# 1047 "src/formatparse.mly"
                  ( ((fun args -> []), 
                     (fun attrs -> Some [])) )
# 2756 "src/formatparse.ml"
               : 'attributes))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1050 "src/formatparse.mly"
                  ( let currentArg = _1 in
                    ((fun args -> 
                        match getArg currentArg args with
                          FA al -> al
                        | a -> wrongArgType currentArg "attributes" a),

                     (fun al -> Some [ FA al ]))
                  )
# 2770 "src/formatparse.ml"
               : 'attributes))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'attribute) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in
    Obj.repr(
# 1060 "src/formatparse.mly"
                  ( ((fun args ->
                       addAttribute ((fst _1) args) ((fst _2) args)),
                     (* Pass all the attributes down *)
                     (fun attrs ->
                       match (snd _1) attrs, (snd _2) attrs with
                         Some m1, Some m2 -> Some (m1 @ m2)
                       | _, _ -> None))
                  )
# 2785 "src/formatparse.ml"
               : 'attributes))
; (fun __caml_parser_env ->
    Obj.repr(
# 1071 "src/formatparse.mly"
                                        ( doAttr "const" None )
# 2791 "src/formatparse.ml"
               : 'attribute))
; (fun __caml_parser_env ->
    Obj.repr(
# 1072 "src/formatparse.mly"
                                        ( doAttr "restrict" None )
# 2797 "src/formatparse.ml"
               : 'attribute))
; (fun __caml_parser_env ->
    Obj.repr(
# 1073 "src/formatparse.mly"
                                        ( doAttr "volatile" None )
# 2803 "src/formatparse.ml"
               : 'attribute))
; (fun __caml_parser_env ->
    let _4 = (Parsing.peek_val __caml_parser_env 2 : 'attr) in
    Obj.repr(
# 1075 "src/formatparse.mly"
                                        ( _4 )
# 2810 "src/formatparse.ml"
               : 'attribute))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1082 "src/formatparse.mly"
                          ( doAttr _1 None )
# 2817 "src/formatparse.ml"
               : 'attr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'attr_args_ne) in
    Obj.repr(
# 1085 "src/formatparse.mly"
                          ( doAttr _1 (Some _3) )
# 2825 "src/formatparse.ml"
               : 'attr))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'attr_arg) in
    Obj.repr(
# 1089 "src/formatparse.mly"
                                 ( ((fun args -> [ (fst _1) args ]),

                                    (fun aargs -> match aargs with 
                                      [ arg ] -> (snd _1) arg
                                    | _ -> None))
                                 )
# 2837 "src/formatparse.ml"
               : 'attr_args_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'attr_arg) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'attr_args_ne) in
    Obj.repr(
# 1095 "src/formatparse.mly"
                                 ( ((fun args -> 
                                      let this = (fst _1) args in
                                      this :: ((fst _3) args)),

                                    (fun aargs -> match aargs with 
                                      h :: rest -> begin
                                        match (snd _1) h, (snd _3) rest with
                                          Some m1, Some m2 -> Some (m1 @ m2)
                                        | _, _ -> None
                                      end
                                    | _ -> None))
                                  )
# 2856 "src/formatparse.ml"
               : 'attr_args_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1107 "src/formatparse.mly"
                        ( let currentArg = _1 in
                          ((fun args -> 
                            match getArg currentArg args with
                              FP al -> al
                            | a -> wrongArgType currentArg "attrparams" a),

                           (fun al -> Some [ FP al ]))
                        )
# 2870 "src/formatparse.ml"
               : 'attr_args_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1118 "src/formatparse.mly"
                     ( ((fun args -> ACons(_1, [])),

                        (fun aarg -> match aarg with 
                            ACons(id, []) when id = _1 -> Some []
                        | _ -> None))
                     )
# 2882 "src/formatparse.ml"
               : 'attr_arg))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : 'attr_args_ne) in
    Obj.repr(
# 1125 "src/formatparse.mly"
                     ( ((fun args -> ACons(_1, (fst _3) args)),

                        (fun aarg -> match aarg with 
                            ACons(id, args) when id = _1 -> 
                              (snd _3) args
                        | _ -> None))
                     )
# 2896 "src/formatparse.ml"
               : 'attr_arg))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1132 "src/formatparse.mly"
                     ( let currentArg = _1 in
                       ((fun args -> 
                          match getArg currentArg args with
                            Fp p -> p
                          | a -> wrongArgType currentArg "attrparam" a),

                        (fun ap -> Some [ Fp ap]))
                     )
# 2910 "src/formatparse.ml"
               : 'attr_arg))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in
    Obj.repr(
# 1146 "src/formatparse.mly"
                        ( let currentArg = _1 in
                          ((fun loc args -> 
                                match getArg currentArg args with 
                                  Fi i -> i
                                | a -> wrongArgType currentArg "instr" a),

                           (fun i -> Some [ Fi i]))
                        )
# 2924 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1156 "src/formatparse.mly"
   ( ((fun loc args -> 
                              Set((fst _1) args, (fst _3) args, loc)),

                           (fun i -> match i with
                             Set (lv, e, l) -> begin
                               match (snd _1) lv, (snd _3) e with
                                 Some m1, Some m2 -> Some (m1 @ m2)
                               | _, _ -> None
                             end
                           | _ -> None))
                        )
# 2942 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1169 "src/formatparse.mly"
   ( ((fun loc args -> 
                              let l = (fst _1) args in
                              Set(l, buildPlus (Lval l) ((fst _3) args), loc)),

                           matchBinopEq 
                             (fun bop -> bop = PlusPI || bop = PlusA)
                             (snd _1) (snd _3)) 
                        )
# 2957 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1179 "src/formatparse.mly"
   ( ((fun loc args -> 
                              let l = (fst _1) args in
                              Set(l, 
                                  buildMinus (Lval l) ((fst _3) args), loc)),

                           matchBinopEq (fun bop -> bop = MinusA 
                                               || bop = MinusPP 
                                               || bop = MinusPI) 
                                      (snd _1)  (snd _3)) 
                        )
# 2974 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1190 "src/formatparse.mly"
   ( doBinopEq Mult _1 _3 )
# 2982 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1193 "src/formatparse.mly"
   ( doBinopEq Div _1 _3 )
# 2990 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1196 "src/formatparse.mly"
   ( doBinopEq Mod _1 _3 )
# 2998 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1199 "src/formatparse.mly"
   ( doBinopEq BAnd _1 _3 )
# 3006 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1202 "src/formatparse.mly"
   ( doBinopEq BOr _1 _3 )
# 3014 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1205 "src/formatparse.mly"
   ( doBinopEq BXor _1 _3 )
# 3022 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1208 "src/formatparse.mly"
   ( doBinopEq Shiftlt _1 _3 )
# 3030 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 1 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1211 "src/formatparse.mly"
   ( doBinopEq Shiftrt _1 _3 )
# 3038 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 6 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 4 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _5 = (Parsing.peek_val __caml_parser_env 2 : 'arguments) in
    Obj.repr(
# 1216 "src/formatparse.mly"
   ( ((fun loc args -> 
                              Call(Some ((fst _1) args), Lval ((fst _3) args), 
                                     (fst _5) args, loc)),

                           (fun i -> match i with 
                             Call(Some l, Lval f, args, loc) -> begin
                               match (snd _1) l, (snd _3) f, (snd _5) args with
                                 Some m1, Some m2, Some m3 -> 
                                   Some (m1 @ m2 @ m3)
                               | _, _, _ -> None
                             end
                           | _ -> None))
                        )
# 3059 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 4 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 2 : 'arguments) in
    Obj.repr(
# 1231 "src/formatparse.mly"
   ( ((fun loc args -> 
                              Call(None, Lval ((fst _1) args), 
                                     (fst _3) args, loc)), 

                           (fun i -> match i with 
                             Call(None, Lval f, args, loc) -> begin
                               match (snd _1) f, (snd _3) args with
                                 Some m1, Some m2 -> Some (m1 @ m2)
                               | _, _ -> None
                             end
                           | _ -> None))
                         )
# 3078 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 5 : 'arglo) in
    let _2 = (Parsing.peek_val __caml_parser_env 4 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _4 = (Parsing.peek_val __caml_parser_env 2 : 'arguments) in
    Obj.repr(
# 1245 "src/formatparse.mly"
       ( ((fun loc args -> 
                       Call((fst _1) args, Lval ((fst _2) args), 
                            (fst _4) args, loc)), 
                        
                        (fun i -> match i with 
                          Call(lo, Lval f, args, loc) -> begin
                            match (snd _1) lo, (snd _2) f, (snd _4) args with
                              Some m1, Some m2, Some m3 -> 
                                Some (m1 @ m2 @ m3)
                            | _, _, _ -> None
                          end
                        | _ -> None))
                     )
# 3099 "src/formatparse.ml"
               : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1262 "src/formatparse.mly"
                         ( let currentArg = _1 in
                           ((fun args -> 
                             let res = 
                               match getArg currentArg args with
                                 Flo x -> x
                               | a -> wrongArgType currentArg "lval option" a
                             in
                             res),

                            (fun lo -> Some [ Flo lo ]))
                         )
# 3116 "src/formatparse.ml"
               : 'arglo))
; (fun __caml_parser_env ->
    Obj.repr(
# 1275 "src/formatparse.mly"
                  ( ((fun args -> []), 

                     (fun actuals -> match actuals with 
                          [] -> Some []
                         | _ -> None))
                  )
# 3127 "src/formatparse.ml"
               : 'arguments))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'arguments_ne) in
    Obj.repr(
# 1282 "src/formatparse.mly"
                  ( _1 )
# 3134 "src/formatparse.ml"
               : 'arguments))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1286 "src/formatparse.mly"
                  ( ((fun args -> [ (fst _1) args ]),

                     (fun actuals -> match actuals with 
                        [ h ] -> (snd _1) h
                       | _ -> None))
                  )
# 3146 "src/formatparse.ml"
               : 'arguments_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1293 "src/formatparse.mly"
                  (  let currentArg = _1 in
                     ((fun args -> 
                         match getArg currentArg args with
                           FE el -> el
                          | a -> wrongArgType currentArg "arguments" a),

                      (fun actuals -> Some [ FE actuals ]))
                  )
# 3160 "src/formatparse.ml"
               : 'arguments_ne))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'arguments_ne) in
    Obj.repr(
# 1303 "src/formatparse.mly"
                  ( ((fun args -> ((fst _1) args) :: ((fst _3) args)),

                     (fun actuals -> match actuals with 
                         h :: rest -> begin
                           match (snd _1) h, (snd _3) rest with 
                             Some m1, Some m2 -> Some (m1 @ m2)
                           | _, _ -> None
                         end
                       | _ -> None))
                  )
# 3177 "src/formatparse.ml"
               : 'arguments_ne))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _5 = (Parsing.peek_val __caml_parser_env 0 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)) in
    Obj.repr(
# 1319 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                         mkStmt (If((fst _3) args, 
                                    mkBlock [ _5 mkTemp loc args ],
                                    mkBlock [], loc)))
                  )
# 3189 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 4 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _5 = (Parsing.peek_val __caml_parser_env 2 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)) in
    let _7 = (Parsing.peek_val __caml_parser_env 0 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)) in
    Obj.repr(
# 1325 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                         mkStmt (If((fst _3) args, 
                                    mkBlock [ _5 mkTemp loc args ],
                                    mkBlock [ _7 mkTemp loc args], loc)))
                  )
# 3202 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'exp_opt) in
    Obj.repr(
# 1331 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                         mkStmt (Return((fst _2) args, loc))) 
                  )
# 3211 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    Obj.repr(
# 1335 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                         mkStmt (Break loc))
                  )
# 3219 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    Obj.repr(
# 1339 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                         mkStmt (Continue loc))
                  )
# 3227 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)) in
    Obj.repr(
# 1343 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                         let stmts = _2 mkTemp loc args in
                         mkStmt (Block (mkBlock (stmts))))
                  )
# 3237 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    let _3 = (Parsing.peek_val __caml_parser_env 2 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    let _5 = (Parsing.peek_val __caml_parser_env 0 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)) in
    Obj.repr(
# 1348 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                        let e = (fst _3) args in
                        let e = 
                          if isPointerType(typeOf e) then 
                            mkCast e !upointType
                          else e
                        in
                        mkStmt 
                          (Loop (mkBlock [ mkStmt 
                                             (If(e,
                                                 mkBlock [],
                                                 mkBlock [ mkStmt 
                                                             (Break loc) ],
                                                 loc));
                                           _5 mkTemp loc args ],
                                 loc, None, None)))
                   )
# 3261 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'instr_list) in
    Obj.repr(
# 1365 "src/formatparse.mly"
                  ( (fun mkTemp loc args -> 
                       mkStmt (Instr (_1 loc args)))
                  )
# 3270 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1368 "src/formatparse.mly"
                  ( let currentArg = _1 in
                    (fun mkTemp loc args -> 
                       match getArg currentArg args with
                         Fs s -> s
                       | a -> wrongArgType currentArg "stmt" a) )
# 3281 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)))
; (fun __caml_parser_env ->
    Obj.repr(
# 1376 "src/formatparse.mly"
                 ( (fun mkTemp loc args -> []) )
# 3287 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1378 "src/formatparse.mly"
                 ( let currentArg = _1 in
                   (fun mkTemp loc args -> 
                       match getArg currentArg args with 
                       | FS sl -> sl 
                       | a -> wrongArgType currentArg "stmts" a)
                 )
# 3299 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)) in
    Obj.repr(
# 1385 "src/formatparse.mly"
                 ( (fun mkTemp loc args -> 
                      let this = _1 mkTemp loc args in
                      this :: (_2 mkTemp loc args))
                 )
# 3310 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 5 : (Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)) in
    let _2 = (Parsing.peek_val __caml_parser_env 4 : 'attributes) in
    let _3 = (Parsing.peek_val __caml_parser_env 3 : 'decl) in
    let _4 = (Parsing.peek_val __caml_parser_env 2 : 'maybe_init) in
    let _6 = (Parsing.peek_val __caml_parser_env 0 : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)) in
    Obj.repr(
# 1391 "src/formatparse.mly"
                ( (fun mkTemp loc args -> 
                     let tal = (fst _2) args in
                     let ts  = (fst _1) tal args in
                     let (n, t, _) = (fst _3) ts args in
                     let init = _4 args in
                     (* Before we proceed we must create the variable *)
                     let v = mkTemp n t in
                     (* Now we parse the rest *)
                     let rest = _6 mkTemp loc ((n, Fv v) :: args) in
                     (* Now we add the initialization instruction to the 
                      * front *)
                     match init with 
                       NoInit -> rest
                     | InitExp e -> 
                         mkStmtOneInstr (Set((Var v, NoOffset), e, loc)) 
                         :: rest
                     | InitCall (f, args) ->
                         mkStmtOneInstr (Call(Some (Var v, NoOffset), 
                                              Lval f, args, loc))
                         :: rest

                                                           )
                 )
# 3343 "src/formatparse.ml"
               : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)) in
    Obj.repr(
# 1420 "src/formatparse.mly"
                 ( (fun loc args -> [ ((fst _1) loc args) ]) )
# 3350 "src/formatparse.ml"
               : 'instr_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 1421 "src/formatparse.mly"
                 ( let currentArg = _1 in
                   (fun loc args -> 
                       match getArg currentArg args with 
                       | FI il -> il 
                       | a -> wrongArgType currentArg "instrs" a)
                 )
# 3362 "src/formatparse.ml"
               : 'instr_list))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 1 : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)) in
    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'instr_list) in
    Obj.repr(
# 1428 "src/formatparse.mly"
                 ( (fun loc args -> 
                      let this = (fst _1) loc args in
                      this :: (_2 loc args))
                 )
# 3373 "src/formatparse.ml"
               : 'instr_list))
; (fun __caml_parser_env ->
    Obj.repr(
# 1436 "src/formatparse.mly"
                                ( (fun args -> NoInit) )
# 3379 "src/formatparse.ml"
               : 'maybe_init))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)) in
    Obj.repr(
# 1437 "src/formatparse.mly"
                                ( (fun args -> InitExp ((fst _2) args)) )
# 3386 "src/formatparse.ml"
               : 'maybe_init))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 3 : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)) in
    let _4 = (Parsing.peek_val __caml_parser_env 1 : 'arguments) in
    Obj.repr(
# 1439 "src/formatparse.mly"
                                ( (fun args -> 
                                    InitCall((fst _2) args, (fst _4) args)) )
# 3395 "src/formatparse.ml"
               : 'maybe_init))
(* Entry initialize *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry expression *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry typename *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry offset *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry lval *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry instr *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry stmt *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
(* Entry stmt_list *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
|]
let yytables =
  { Parsing.actions=yyact;
    Parsing.transl_const=yytransl_const;
    Parsing.transl_block=yytransl_block;
    Parsing.lhs=yylhs;
    Parsing.len=yylen;
    Parsing.defred=yydefred;
    Parsing.dgoto=yydgoto;
    Parsing.sindex=yysindex;
    Parsing.rindex=yyrindex;
    Parsing.gindex=yygindex;
    Parsing.tablesize=yytablesize;
    Parsing.table=yytable;
    Parsing.check=yycheck;
    Parsing.error_function=parse_error;
    Parsing.names_const=yynames_const;
    Parsing.names_block=yynames_block }
let initialize (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 1 lexfun lexbuf : unit)
let expression (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 2 lexfun lexbuf : ((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option))
let typename (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 3 lexfun lexbuf : ((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option))
let offset (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 4 lexfun lexbuf : (Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option))
let lval (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 5 lexfun lexbuf : ((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option))
let instr (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 6 lexfun lexbuf : (Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option))
let stmt (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 7 lexfun lexbuf : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt))
let stmt_list (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 8 lexfun lexbuf : ((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list))
;;
# 1443 "src/formatparse.mly"







# 3456 "src/formatparse.ml"
